C 随机双入环保持不变

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

我有下面的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); 
    }
}

代码的行为未定义

(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