日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

随机发生器:线性同余法

發布時間:2024/8/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 随机发生器:线性同余法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

線性同余法

這里不做過多介紹,搜一下就知道
核心函數:
xn+1=(a?xn+b)%mx_{n+1}=(a*x_n+b) \% mxn+1?=(a?xn?+b)%m
xn+1x_{n+1}xn+1?就是我們下一個要算的隨機數
x0x_0x0?是我們的種子數

Code

// jave.lin 2019.08.20public class Ran{private static Random s_r = new Random();private int seed;private Random ran;public Ran(int seed = int.MinValue){if (seed == int.MinValue){this.seed = s_r.Next();}else{this.seed = seed;}ran = new Random(this.seed);}public int Range(int min, int max){return ran.Next(min, max);}public int Seed => seed;} // jave.lin 2019.08.20// linear congruential method// references:// - 隨機數原理揭秘:線性同余法;http://blog.sina.com.cn/s/blog_d324e9ca0102wk4b.html// - 線性同余法:https://baike.baidu.com/item/%E7%BA%BF%E6%80%A7%E5%90%8C%E4%BD%99%E6%B3%95/10528746?fr=aladdinpublic class LinearCongruentialMethod{private static Ran r = new Ran();public int seed;private int a;private int b;private int m;private float invMF;private double invMD;public LinearCongruentialMethod(int s = -1){//seed = s == -1 ? r.Range(int.MinValue, int.MaxValue) : s;//a = r.Range(int.MinValue, int.MaxValue);//b = r.Range(int.MinValue, int.MaxValue);//m = r.Range(1099999999, 2099999999);seed = s == -1 ? r.Range(0, int.MaxValue) : s;a = -536363;b = 83517;m = 2099999999;invMF = 1 / (float)m;invMD = 1 / (double)m;}public int Ran() => seed = (seed * a + b) % m;public float RanF() => float.MinValue + RanF01() * (float.MaxValue - float.MinValue);public double RanD() => double.MinValue + RanD01() * (double.MaxValue - double.MinValue);public int Range(int min, int max) => (int)(min + RanF01() * (max - min)); public float RanF(float min, float max) => min + RanF01() * (max - min);public double RanD(double min, double max) => min + RanD01() * (max - min);// 這里我簡寫:n121意思是:negative 1 to 1==>n121==>[-1~1)public float RanFn121() => (Ran() * invMF);public double RanDn121() => (Ran() * invMD);// [0~1)public float RanF01() => RanFn121() * 0.5f + 0.5f;public double RanD01() => RanDn121() * 0.5f + 0.5f;}

運行效果

使用該隨機發生器生成的白色噪點(white noise)

使用excel來將采樣數據的線表圖顯示效果

References

  • 隨機數原理揭秘:線性同余法
  • 線性同余法

總結

以上是生活随笔為你收集整理的随机发生器:线性同余法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。