游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2671|回复: 3

用rand产生一组随机数问题

[复制链接]

1

主题

88

帖子

93

积分

注册会员

Rank: 2

积分
93
QQ
发表于 2009-11-20 23:38:00 | 显示全部楼层 |阅读模式
void RangedRandDemo( int range_min, int range_max, int n )
{
   int i;
   for ( i = 0; i < n; i++ )
   {
      int u = (double)rand() / (RAND_MAX + 1) * (range_max - range_min)
            + range_min;
      cout<<u<<endl;
   }
}
这个函数的功能是产生一组range_min到range_max的随机数,可以为负数到正数,但是这句话不是特别理解:
int u = (double)rand() / (RAND_MAX + 1) * (range_max - range_min) + range_min;

RAND_MAX+1是什么意思?请高手帮忙下,讲解下这一整句!谢谢

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2009-11-21 12:04:00 | 显示全部楼层

Re:用rand产生一组随机数问题

/* Maximum value that can be returned by the rand function. */
#define RAND_MAX 0x7fff

有了上面这个定义,自然就明白了。

(double)rand() / (RAND_MAX + 1)
就是利用随机数,得到位于[0,1)这个比例区间的一个系数。如果除数是RAND_MAX,那么这个区间就是[0,1]。另外,这里转换为double,是为了避免+1后溢出(或变为最大负整数)。(16位机)

(range_max - range_min)
实际的区间范围.系数乘以这个实际区间范围,就得到了在这个区间中的一个数值。

最后加上range_min,就得到了最终的值 [range_min, range_max)。



























1

主题

88

帖子

93

积分

注册会员

Rank: 2

积分
93
QQ
 楼主| 发表于 2009-11-21 13:56:00 | 显示全部楼层

Re:用rand产生一组随机数问题

非常感谢~明白了~

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2009-11-26 11:26:00 | 显示全部楼层

Re:用rand产生一组随机数问题

rand是伪随机函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-17 02:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表