24小时热门版块排行榜    

查看: 1636  |  回复: 14
当前主题已经存档。

tc1788

铁虫 (小有名气)

[交流] 【求助】产生0~1之间随机数的函数

产生0~1之间随机数的函数 大家帮帮忙好吗
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ms98


sunxiao(金币+1,VIP+0):谢谢参与,欢迎常来 7-15 06:50
srand( time( NULL ) );  //种子函数
rand();  //产生随机数的函数
其实google一下啥都有了
2楼2009-07-14 22:09:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

羽寒月

银虫 (小有名气)

★ ★
wangen994(金币+1,VIP+0):感谢参与讨论 7-16 09:05
tc1788(金币+1,VIP+0):谢谢 7-29 10:05
要0和1之间的还要除一下
a = rand()/(RAND_MAX+1.0);
3楼2009-07-15 15:49:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

argo

铁杆木虫 (著名写手)

上善若水

一般的随机函数都是0-1之间的吧
居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。
4楼2009-07-15 17:48:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ms98

★ ★ ★
wangen994(金币+2,VIP+0):感谢参与讨论 7-16 09:05
tc1788(金币+1,VIP+0):谢谢 很详细 7-29 10:04
c/c++中返回的是0~RAND_MAX之间的一个数。
一般我们的做法都是把0~1映射到0~n的范围,在c++中只要反过来就可以了。2楼的除法是一种,还可以用求余的办法:
(rand() % 100) / 100.0,这样就得到精度为0.01,0~100间分布的随机数了。
ls说得也很对哦,一般随机函数返回都在0-1间,可惜random不是c标准,所以他们自己做了一个rand,看起来和大环境不是很一致。
5楼2009-07-15 21:11:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

prestoner

木虫 (小有名气)

★ ★
sunxiao(金币+1,VIP+0):谢谢参与,欢迎常来 7-26 05:41
tc1788(金币+1,VIP+0):谢谢 7-29 10:04
这样得到的才是均匀分布的 [0.0, 1.0]随机数:
rand() / (float)RAND_MAX
╰╭︿︿☆╮ {/ . .\} ( (oo) ) ︶︶︶︶
6楼2009-07-26 01:01:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tc1788

铁虫 (小有名气)

a = rand()/(RAND_MAX+1.0);
和rand() / (float)RAND_MAX 是一样的吗
7楼2009-07-29 10:05:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ms98

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
wangen994(金币+2,VIP+0):感谢你参与交流,常来啊 7-30 21:46
c/c++中返回的是0~RAND_MAX之间的一个数。所以两个差不离,你自己琢磨一下就能发现其中的差别了,半开半闭和全封闭的关系而已。
我发现一个问题讨论到后面总会跑到细枝末节上去...
8楼2009-07-30 12:59:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

black1316

★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
gwdavid(金币+5,VIP+0):谢谢 8-24 15:45
我参考 java 随机数生成函数写的一个简单的 C++ 版本

typedef unsigned long long uLL;

uLL seed = 1;

void setSeed( uLL s )
{
        seed = s;
}

       
double nextDouble()  // 返回下一个 double 型随机数,范围是 0 到 1
{
        return ( ( ( uLL )next( 26 ) << 27 ) + next( 27 ) ) / 9007199254740992.0;  
}
       
int next( int bits )  // 生成下一个伪随机数
{
      
        seed = ( seed * 25214903917L + 11L ) & 0xFFFFFFFFFFFF;
        return ( int ) ( seed >> ( 48 - bits ) );
}

使用 nextDouble() 函数就可以返回 0 到 1 之间的伪随机数了。
一般用系统时间来设置随机数种子,即 seed = ( unsigned ) time( NULL );
9楼2009-08-24 12:24:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

woshilsh

荣誉版主 (职业作家)

优秀版主

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
gwdavid(金币+1,VIP+0):谢谢 8-24 15:44
建议先google下,那里可是啥都有
[center][url=http://www.91cool.net/][img]http://id.91cool.net/sign/?name=小木虫印&amp;amp;amp;say=各位版主辛苦了![/img][/url][/center]
10楼2009-08-24 15:35:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tc1788 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见