gpt4 book ai didi

c - 随机双循环保持不变

转载 作者:太空狗 更新时间:2023-10-29 16:05:36 24 4
gpt4 key购买 nike

我有以下 C 程序来循环生成随机数。虽然这对整数很有效,但当我尝试生成一个介于 0 和 1 之间的随机 double 值时,该值在整个循环中保持不变。

  • 为什么会这样?
  • 如何在循环中的 [0, 1] 中生成随机 double 值?

来源:

#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 类型的表达式。这需要在 printf 调用中使用 %f 格式说明符。

(另请注意,(double) rand()/RAND_MAX 可以绘制 1.0,这是特殊的。通常您将 RAND_MAX + 1 写在分母。)

关于c - 随机双循环保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47549990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com