java.util.Random
next方法的原理
比較好的參考文檔:
http://isky001.iteye.com/blog/1339979
package random.utilrandom; import java.util.Random; public class TestRandom { public static void main(String[] args) { Random ran1 = new Random(10); System.out.println("使用種子為10的Random對象生成[0,10)內隨機整數序列: "); for (int i = 0; i < 10; i++) { System.out.print(ran1.nextInt(10) + " "); } System.out.println(); Random ran2 = new Random(10); System.out.println("使用另一個種子為10的Random對象生成[0,10)內隨機整數序列: "); for (int i = 0; i < 10; i++) { System.out.print(ran2.nextInt(10) + " "); } Random ran3 = new Random(10); System.out.println("使用另一個種子為10的Random對象生成[0,10)內隨機整數序列: "); for (int i = 0; i < 10; i++) { System.out.println(ran3.nextInt()); } System.out.println(); Random ran4 = new Random(10); System.out.println("使用另一個種子為10的Random對象生成[0,10)內隨機整數序列: "); for (int i = 0; i < 10; i++) { System.out.println(ran4.nextInt()); } } }
Math.random()本質上是調用RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();即是java.util.Random.nextDouble()
還有一個講解線性同余公式的文章很不錯
http://www.cnblogs.com/xkfz007/archive/2012/03/27/2420154.html
再來一個英文文檔解釋nextseed = (oldseed * multiplier + addend) & mask;