此代码中的哪个位置生成一个随机数?

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只是种子?

ale*_*ull 6

事实是,该代码不会生成随机数...它会生成伪随机数.假设你从相同的种子开始,外行人想象发生了什么的方式是你正在经历一个巨大的"随机"数字列表.最终,数字将重复,但一个好的公式是使这种重复发生在一个很大的间隔.

为了澄清,请查看Excel使用的rand公式:http://support.microsoft.com/kb/828795