我遇到了 rgba的浮点随机数生成器:
http://rgba.org/articles/sfrand/sfrand.htm
解释清楚,代码简单。有一个问题:我无法弄清楚随机位是从哪里来的。下面的代码片段:
static unsigned int mirand = 1;
float sfrand( void )
{
unsigned int a;
mirand *= 16807;
a = (mirand&0x007fffff) | 0x40000000;
return( *((float*)&a) - 3.0f );
}
我确实尝试过 compile this function并且始终得到 -0.995993
的结果,如果 mirand
以 1
开头,这就有意义了。我错过了什么,或者 mirand
只是种子?
最佳答案
事实是,该代码不会生成随机数……它会生成伪随机 数。假设你从同一个种子开始,外行人想象正在发生的事情的方式是你只是在浏览一个巨大的“随机”数字列表。最终,数字会自己重复,但一个好的公式可以使这种重复以较大的间隔发生。
为了澄清,请看一下 Excel 使用的兰特公式:http://support.microsoft.com/kb/828795
关于c - 这段代码在哪里生成随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109703/