gpt4 book ai didi

c - RAND_MAX 在重铸时表现出异常行为

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:27 24 4
gpt4 key购买 nike

我希望生成介于 0 和 1 之间的随机数。(显然,这在其他地方也有应用。)

我的测试代码:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main() {
double uR;
srand(1);
for(int i=0;i<5;i++){
uR = rand()/(RAND_MAX+1.000);
printf("%d \n", uR);
}
}

下面是使用 GCC 编译代码后的输出:

gcc -ansi -std=c99 -o rand randtest.c
./rand
0
-251658240
910163968
352321536
-528482304

经过检查,结果表明将整数 RAND_MAX 转换为 double 会产生将其值从 2147483647 更改为 -4194304 的效果。无论使用何种方法将 RAND_MAX 更改为 double 类型,都会发生这种情况;到目前为止,我也尝试过 (double)RAND_MAXdouble max = RAND_MAX

为什么数字的值会改变?我怎样才能阻止这种情况发生?

最佳答案

您不能使用 %d 打印 double。如果你使用 %f,它工作得很好。

关于c - RAND_MAX 在重铸时表现出异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763362/

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