C 随机双入环保持不变
我有下面的c程序来生成循环中的随机数。 虽然这对整数很有效,但当我尝试生成0和1之间的随机双精度时,该值在整个循环中保持不变C 随机双入环保持不变,c,random,C,Random,我有下面的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
- 为什么会这样
- 如何在循环中生成[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);
}
}
代码的行为未定义
(double)rand()/rand_MAX
是类型为double
的表达式。这需要在printf
调用中使用%f
格式说明符
(还请注意,
(double)rand()/rand_MAX
可以绘制1.0
,这是一种特殊的绘制方式。通常您在分母上写rand_MAX+1
)格式说明符printf()
不正确。此外:rand()的结果是什么/RAND_MAX?@dbran0不应该规范化0和1之间的随机数吗?如果我错了,请纠正我。格雷戈:我的错。演员阵容比除法有优势,所以没关系。而是RAND_MAX+1
?否则它甚至可能>1@GregorSturm:的确,我们将联合出版!
>gcc -O3 -o test test.c -lm
>./test
787380606
1210256636
1002592740
1410731589
737199770
-684428956
-684428956
-684428956
-684428956
-684428956