【发布时间】:2017-11-28 15:38:24
【问题描述】:
我很可能把整个代码都做错了,但是在尝试查找范围时:
4.0*rand()/RAND_MAX + 1
我最终只得到了数字 0,而且我很确定还有更多。
代码(C 语言):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int r;
4.0*rand()/RAND_MAX+1;
printf("%i",r);
return 0;
}
【问题讨论】:
-
找到一个范围?单数?嗯?
-
r未分配任何值。变量r包含垃圾。 -
rand()/RAND_MAX导致分布不均。 数学上代码需要做rand()/(RAND_MAX + 1)。建议4.0*rand()/(RAND_MAX+1.0)+1;更好的代码可以更准确地处理RAND_MAX到double,就像4.0*rand()/(RAND_MAX+ 1LLU)+1;一样