我有下面的C程序在循环中生成随机数。
虽然这对整数很有效,但当我尝试生成介于0和1之间的随机双精度数时,该值在整个循环中保持不变。
为什么会这样?
如何在循环中生成[0,1]中的随机双精度值?
资料来源:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main(int argc, char** argv) {
    srand(time(NULL));
    for(int i=0; i<5; i++) {
        printf("%d\n", rand());
    }
    for(int i=0; i<5; i++) {
        printf("%d\n", (double) rand() / RAND_MAX);
    }
}

输出:
>gcc -O3 -o test test.c -lm
>./test
787380606
1210256636
1002592740
1410731589
737199770
-684428956
-684428956
-684428956
-684428956
-684428956

最佳答案

代码的行为未定义。
(double) rand() / RAND_MAXdouble类型的表达式。这需要在%f调用中使用printf格式说明符。
(还要注意(double) rand() / RAND_MAX可以绘制1.0,这是特殊的。通常你在分母上写RAND_MAX + 1。)

10-07 22:26