在Jython中使用(伪)随机数时,使用Python的random模块还是Java的random类更有效率?
在我的Mac上进行简单测试后,Python版本要快得多:
jython -m timeit -s "import random" "random.random()"
1000000次循环,三次取最佳结果:每次循环耗时0.266微秒
与之比较:
jython -m timeit -s "import java.util.Random; random=java.util.Random()" "random.nextDouble()"
循环1000000次,取最佳结果:每次循环用时1.65微秒。
Jython版本为2.5b3,Java版本为1.5.0_19。
Java的Random类使用(确实必须使用)线性同余算法,而Python则使用Mersenne Twister。 Mersenne保证了极高质量(尽管不是加密质量!)的随机数和一个可笑长的周期(53位精度浮点数,周期2 ** 19937-1); 线性同余生成器有众所周知的问题。 如果您真的不关心随机数的质量,只关心速度,那么LCG很可能会更快,因为它不太复杂。