Xav*_* Ho 3 c random floating-point
我遇到了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 );
}
Run Code Online (Sandbox Code Playgroud)
我确实尝试编译这个函数并且总是得到一个结果-0.995993
,如果mirand
从那里开始就有意义1
.我错过了什么,或者mirand
只是种子?
事实是,该代码不会生成随机数...它会生成伪随机数.假设你从相同的种子开始,外行人想象发生了什么的方式是你正在经历一个巨大的"随机"数字列表.最终,数字将重复,但一个好的公式是使这种重复发生在一个很大的间隔.
为了澄清,请查看Excel使用的rand公式:http://support.microsoft.com/kb/828795