首页 新闻 会员 周边 捐助

关于 rand() 函数返回值的值域的疑问

0
[已解决问题] 解决于 2013-09-19 15:47

《C语言参考手册》中关于 rand() 函数有如下描述。

 

(1)rand() 函数的原型

        int rand(void);

(2)连续调用 rand 将返回 0 到 int 类型的最大可表示的正值(含该值)之间的整数值,它们是一个伪随机数生成器所产生的连续结果。在标准 C 中,rand 的上界是上 RAND_MAX 所指定的,这个值至少是 32 767。

问题:rand 返回的值包括 0 吗?一直以来都有这个疑问,也做了一些简单的实验,结果是不包括 0,但毕竟没有找到文字说不包括 0,所以一直不能肯定。虽然从 (2) 的描述来看,应该是不包括 0 的。所以还是决定向大家咨询一下,rand 返回的值域到底是 (0, RAND_MAX],还是 [0, RAND_MAX]。期待您的回答。

businessman的主页 businessman | 菜鸟二级 | 园豆:204
提问于:2013-09-17 23:06
< >
分享
最佳答案
0

C99标准7.20.2.1
The rand function computes a sequence of pseudo-random integers in the range 0 to RAND_MAX.

 

7.20.2.2 还给出了一种srand和rand的实现方法,从代码来看范围是[0,RAND_MAX]

EXAMPLE The following functions define a portable implementation of rand and srand.
static unsigned long int next = 1;
int rand(void) // RAND_MAX assumed to be 32767
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}

void srand(unsigned int seed)
{
next = seed;
}

奖励园豆:5
嗷嗷 | 小虾三级 |园豆:757 | 2013-09-18 12:02

等了几天,没有其他答复。

 

通过与其他人的交流,我赞同您的答复,谢谢。

businessman | 园豆:204 (菜鸟二级) | 2013-09-19 15:45
其他回答(1)
0

正值不包括0

薛遗山 | 园豆:106 (初学一级) | 2013-09-18 08:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册