主题:随机产生10个30~80的整数,怎么写?
zoa
[专家分:0] 发布于 2006-03-19 20:11:00
同上。
另外,如果要求“包含两端”,和标题的又有什么区别?
回复列表 (共20个回复)
沙发
meizi177 [专家分:70] 发布于 2006-03-19 20:42:00
for i = 1 to 10
a(i)= int (rnd*50+30)
next i
包括30 和50!
板凳
moz [专家分:37620] 发布于 2006-03-19 22:37:00
不会出现80的,
应该是=int(rnd*51)+30
3 楼
飞鸟12 [专家分:2830] 发布于 2006-03-19 22:48:00
0 <= RND < 1
0 <= b * RND < b
a <= a + b * RND < a + b
0 <= INT(b * RND) <= b - 1
a <= a + INT(b * RND) <= a + b - 1
0 <= b * RND + 1 < b + 1
a <= a + b * RND + 1 < a + b + 1
0 <= INT(b * RND) + 1 <= b
a <= a + INT(b * RND) + 1 <= a + b
4 楼
moz [专家分:37620] 发布于 2006-03-19 23:26:00
最后四行有点问题。
5 楼
咖啡猪 [专家分:290] 发布于 2006-03-20 04:24:00
请问如何产生一个包含两端的随机?(不要求整数)
6 楼
meizi177 [专家分:70] 发布于 2006-03-20 10:11:00
是的啦!
没加1,
7 楼
moz [专家分:37620] 发布于 2006-03-20 22:01:00
请问如何产生一个包含两端的随机?(不要求整数)
随机数本身只有一边,另一边是无限趋向接近而不等的。
0<= rnd < 1
如何使它变成两端等值呢(好像是叫做开区间是不是?)
想一想这个值 abs( 0.5 - rnd )
8 楼
咖啡猪 [专家分:290] 发布于 2006-03-21 00:25:00
晕,我曾想过这个算式。它的解可以产生一个 0 至 0.5 且包含两端的随机数。
但我发现不好用。
我本想研究一个能产生一个 0 至 1 且包含两端的算式,再用这个算式代替rud做随机处理的,如 2*abs( 0.5 - rnd ) ,但发现它只能产生偶数,所以放弃了。
9 楼
moz [专家分:37620] 发布于 2006-03-21 00:46:00
不好用?偶数?
不是偶数,只是精度降低了一半。
这很正常,只是牺牲一点精度而已,对你的计算一点影响都没有。
你认为只有0.5782222,而缺少0.5782221这个数会有什么不妥?
如果做到整数那就更没问题了。
10 楼
咖啡猪 [专家分:290] 发布于 2006-03-21 12:08:00
我说的偶数是我想的 2*ABS( 0.5 - RND ) 这个算式
不乘2时是有奇数的,这我知道,但用起来怎么求指定范围的随机数呀
SRND = ABS( 0.5 - RND )
A = SRND * (最大值-最小值) [color=FF0000]*2[/color] + 最小值
难道要乘2吗?这样不是偶数吗?整个算式A的值随最小值奇偶。
我终于想到一个办法 INT(RND*x+1)/(RND+x) 'x值越大越精细
SRND = INT(RND * (32767 + 1)) / (RND + 32767)
A = SRND * (最大值-最小值) + 最小值
SRUD为改良随机数,这时A的奇偶将无法确定
我来回复