我有下面的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_MAX
是double
类型的表达式。这需要在%f
调用中使用printf
格式说明符。
(还要注意(double) rand() / RAND_MAX
可以绘制1.0
,这是特殊的。通常你在分母上写RAND_MAX + 1
。)