用rand() 函数去100 个随机的整数的问题
int rand100 = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
你让 RANGE_MAX=1;RANGE_MIN = 0
问题:
1 rand() 返回的是 什么类型的数?
2 (double) rand() / (double) RAND_MAX),为什么要对rand取整?这样的结果不就是 零 吗?
3 要是 去 100 个 随机 整数,这个程序对吗?
分享到:
更多
------解决方案--------------------
rand()返回值是int
RANGE_MAX取值应该为100,这样就是一个0-100范围内的随机数
------解决方案--------------------
参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c
/***
*rand.c - random number generator
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines rand(), srand() - random number generator
*
*******************************************************************************/
#include
#include
#include
#include
/***
*void srand(seed) - seed the random number generator
*
*Purpose:
* Seeds the random number generator with the int given. Adapted from the
* BASIC random number generator.
*
*Entry:
* unsigned seed - seed to seed rand # generator with
*
*Exit:
* None.
*
*Exceptions:
*
*******************************************************************************/
void __cdecl srand (
unsigned int seed
)
{
_getptd()->_holdrand = (unsigned long)seed;
}
/***
*int rand() - returns a random number
*
*Purpose:
* returns a pseudo-random number 0 through 32767.
*
*Entry:
* None.
*
*Exit:
* Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/
int __cdecl rand (
void
)
{
_ptiddata ptd = _getptd();
return( ((ptd->_holdrand = ptd->_holdrand * 214013L
+ 2531011L) >> 16) & 0x7fff );
}
------解决方案--------------------
1.rand()函数返回什么
rand()函数式stdlib.h里声明的函数。
它生成一个[0, RAND_MAX]的均匀随机整数。
其中,RAND_MAX至少为32767(2^15-1)
returns a pseudo-random number 0 through 32767.
2. (double) rand() / (double) RAND_MAX):
这是把生成的随机数范围缩小到[0,1],double/double得出结果不是0,而是double型数据
3. 要是 去 100 个 随机 整数,这个程序对吗?
不对。
乘以RANGE_MAX是让随机数的范围扩大到[0, RANGE_MAX],加上RANGE_MIN是让随机数的范围限制到[RANGE_MIN, RANGE_MAX]