c stdlib.h 中 RAND_MAX 和 rand() 的说明

标签 c gnu ansi ansi-c

当 RAND_MAX 的值为 0.000000RAND_MAX 不应该为 rand() 函数生成的数字设置最大值吗?

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {

    double a,b,c;
    for (int i=0;i<100;i++){
    a=(double)rand()/(double)RAND_MAX;
    b=(double)rand()/(double)RAND_MAX;
    c=a-b;
    printf("itteration : %d values a=%f,b=%f,c=%f, RAND_MAX=%f \n",i,a,b,c,RAND_MAX);
    }  
    return 0;
    }

最佳答案

RAND_MAX 是一个整数常量,但您使用 %f 说明符(用于 double)打印它,这是未定义的行为(在你的情况下恰好打印 0)。使用 %d,您将看到 RAND_MAX 的实际值。

顺便说一句,如果您将警告设置得足够高,几乎任何体面的编译器都会警告您有关无效 printf 的信息。一定要这样做,C和C++的陷阱够多的,至少让编译器在它能帮你的时候帮你。

关于c stdlib.h 中 RAND_MAX 和 rand() 的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52051111/

相关文章:

我可以在c中使用->吗?这给我带来了一个错误

parsing - Gnu Bison 移位/减少描述分层表达式的基于缩进的语法中的冲突

oracle - 十进制(s,p)或数字(s,p)?

smalltalk - ANSI Smalltalk 和 Smalltalk-80 有什么区别?

c - printf() 中赋值运算符的问题

c - 如何将 Child 和 Child 添加到现有节点?

CMake find_package 找不到我的 MinGW libjpeg

c++ - gnu 在目录名 vpath 中留出空格

c - 如何从hsearch中删除元素

regex - 为什么这个正则表达式更快?