Math random()的内部实现
这是Lua语言中生成随机数的语法-- 数学随机Math random()的内部实现,math,random,lua,Math,Random,Lua,这是Lua语言中生成随机数的语法-- 数学随机 几乎所有编程语言都有类似语法的函数。我的问题是函数是如何实现的。它如何能够生成随机输出 伪随机算法的工作原理是从现有种子值生成看似任意的比特模式。然后将生成的值作为下一个随机数的种子保存 大多数随机生成器最初是使用系统时钟中的值进行种子设定的。虽然时间是一个相对可预测的值,但一旦它通过随机算法一次,它就足够随机(对于大多数应用程序) 该算法生成一系列看似不相关的值,因此它们可以用作随机值。由于值之间自然存在关系,即使非常复杂,值实际上也是伪随机的
几乎所有编程语言都有类似语法的函数。我的问题是函数是如何实现的。它如何能够生成随机输出 伪随机算法的工作原理是从现有种子值生成看似任意的比特模式。然后将生成的值作为下一个随机数的种子保存 大多数随机生成器最初是使用系统时钟中的值进行种子设定的。虽然时间是一个相对可预测的值,但一旦它通过随机算法一次,它就足够随机(对于大多数应用程序) 该算法生成一系列看似不相关的值,因此它们可以用作随机值。由于值之间自然存在关系,即使非常复杂,值实际上也是伪随机的
一种简单的随机算法,用于速度较慢且机器字较小的计算机,将种子值乘以素数,再加上一,得到机器字所需的较低位。示例(C#): 函数在调用的前100次返回这些值:
39695 2438 25987 29442 38231 41886 30603 35418 12575 24118 65299 24114
30311 37198 50203 34442 60719 5350 3747 7010 40311 16638 42667 46266
3903 60822 54323 27282 19079 29358 24379 54506 55119 43078 36803 3010
48535 58974 11723 42778 34143 1270 33107 48882 13991 23566 21083 60234
22895 50086 59619 17442 62903 37822 3307 24954 37759 42070 1651 23378
15047 19822 40315 51626 29583 26374 6659 50306 17879 18718 17419 58330
14751 52150 25491 16306 22247 18126 16539 28682 9647 37478 8995 36066
44535 1662 54059 11834 30655 31510 39091 27666 35591 18478 15291 56938
28623 17862 1091 40258
正如你所看到的,即使是这样一个简单的算法也能给出相当好的结果。但是,现代随机生成器使用更复杂的算法,如。您是否尝试过查找函数的源代码?它使用标准C库中的函数(
rand
或POSIX系统上的random
)。正如Etan所提到的,您可以将自己视为Lua资源是免费提供的。请参阅。
39695 2438 25987 29442 38231 41886 30603 35418 12575 24118 65299 24114
30311 37198 50203 34442 60719 5350 3747 7010 40311 16638 42667 46266
3903 60822 54323 27282 19079 29358 24379 54506 55119 43078 36803 3010
48535 58974 11723 42778 34143 1270 33107 48882 13991 23566 21083 60234
22895 50086 59619 17442 62903 37822 3307 24954 37759 42070 1651 23378
15047 19822 40315 51626 29583 26374 6659 50306 17879 18718 17419 58330
14751 52150 25491 16306 22247 18126 16539 28682 9647 37478 8995 36066
44535 1662 54059 11834 30655 31510 39091 27666 35591 18478 15291 56938
28623 17862 1091 40258