在以下代码中:

float sfrand( int *seed )
{
    float res;

    seed[0] *= 16807;

    *((unsigned int *) &res) = ( ((unsigned int)seed[0])>>9 ) | 0x40000000;

    return( res-3.0f );
}


来源:http://iquilezles.org/www/articles/sfrand/sfrand.htm

最佳答案

seed[0]*seed相同,这是seed指针指向的第一个整数(如果不指向数组,则可能是唯一的整数)。

*=运算符是“按产品分配”运算符,

seed[0] *= 16807;

*seed = *seed * 16807;,这是您要求的行所做的。

看来,整个函数是一种生成伪随机数的简单算法。修改种子的目的是,下一次调用将产生不同的伪随机数。

关于c - 该行seed [0] * = 16807有什么作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54974084/

10-13 08:13