我希望生成介于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_MAX
和double max = RAND_MAX
。
为什么数字的值会发生变化?我怎么能阻止这种情况发生?
答案 0 :(得分:3)
您无法使用double
打印%d
。如果你使用%f
,它就可以了。
答案 1 :(得分:1)
当您需要uR
时,您正在将{({1}})传递给printf
。您应该使用signed int
%f
答案 2 :(得分:1)
您正在以十进制整数形式打印双精度值 - 这会让您感到困惑。
使用%.6f
或类似内容。