线性同余法生成随机数Matlab_生成安全的随机数
0x01:生產(chǎn)隨機(jī)數(shù)的方式
- Math.random()0到1之間隨機(jī)數(shù)
- java.util.Random偽隨機(jī)數(shù)(線性同余法生成)
- java.security.SecureRandom真隨機(jī)數(shù)
- java.util.concurrent.ThreadLocalRandom每一個線程有一個獨(dú)立的隨機(jī)數(shù)生成器
0x02:Math.random()
Math.random()產(chǎn)生的隨機(jī)數(shù)是在0 到1之間的一個double類型的隨機(jī)數(shù),即 0 <= random <= 1
例子
public static void main(String[] args) { for(int i=0; i<10; i++){ System.out.println(Math.random()); } }結(jié)果
0.55618691753422430.86408888351504140.2928147316268310.98735487802474750.323925041909681970.0232301114478186130.79118793895482530.64530781588057550.82554439407429070.0476070934096563看下圖
從源碼分析發(fā)現(xiàn),調(diào)用Math.random()方法時,自動創(chuàng)建了一個偽隨機(jī)數(shù)生成器,實際上用的是new java.util.Random()。
0x03:java.util.Random偽隨機(jī)數(shù)
java.util.Random采用線性同余法偽隨機(jī)數(shù)生成器(linear congruential pseudorandom number generator [簡稱LGC]),所以該隨機(jī)數(shù)具有可預(yù)測性的缺點(diǎn)。在注重信息安全的應(yīng)用中,不要使用 LCG 算法生成隨機(jī)數(shù),請使用 java.security.SecureRandom。
例子
public static void main(String[] args) { Random random = new Random(); for(int i=0; i<10; i++){ System.out.println(random.nextInt()); } }結(jié)果
-932663432-1051420847-1702465501965458676-201833620613997342061142954832-1274289135918821980-537649235java.util.Random類默認(rèn)使用當(dāng)前系統(tǒng)時鐘作為種子
Random類提供的方法:
- java.util.nextBoolean() - 返回均勻分布的 true 或者 false
- nextBytes(byte[] bytes)
- nextDouble() - 返回 0.0 到 1.0 之間的均勻分布的 double,Math.random() 調(diào)用的就是該方法
- nextFloat() - 返回 0.0 到 1.0 之間的均勻分布的 float
- nextGaussian() - 返回 0.0 到 1.0 之間的高斯分布(即正態(tài)分布)的 double
- nextInt() - 返回均勻分布的 int
- nextInt(int n) - 返回 0 到 n 之間的均勻分布的 int (包括 0,不包括 n)
- nextLong() - 返回均勻分布的 long
- setSeed(long seed) - 設(shè)置種子
另外只要種子一樣,產(chǎn)生的隨機(jī)數(shù)也一樣; 因為種子確定,隨機(jī)數(shù)算法也就確定了,所以輸出是確定的。
例子
public static void main(String[] args) { Random random1 = new Random(1000); Random random2 = new Random(1000); for(int i=0; i<10; i++){ System.out.println("random1 = "+ random1.nextInt() +總結(jié)
以上是生活随笔為你收集整理的线性同余法生成随机数Matlab_生成安全的随机数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab怎么画地震反应谱,地震工程学
- 下一篇: 音阶对应频率表