作者tomin (蓝蓝紫黄橘 粉灰白绿咖)
看板Ajax
标题Re: [问题] random设定范围、最小(大)值
时间Tue Feb 8 17:48:12 2011
※ 引述《s25g5d4 (死城盗贼)》之铭言:
: js里的Math.random()返回的是介於0~1之间的乱数
: 没有原生的范围设定与最小(大)值
: 我的做法是直接把random产生的数乘上范围数量
: 然後无条件舍去 在加上最小值
: 这样写可以吗?
: Math.floor( Math.random() * (max - min + 1) ) + min;
: 这样在结果上会不会有分配不均的可能性?
: 就是某个数被选中的机率会偏高
这个写法很标准 我测是很平均
两笔(随机产生数字1或2)时:
http://www.jsfiddle.net/Lr2W9/
sampleNum: 4, sampleSize: 1000000
chanceOneCount: 500312
chanceTwoCount: 499688
多笔(随机产生数字1~7)时:
http://www.jsfiddle.net/N345P/
sampleNum: 3, sampleSize: 100000
No1: 14250
No2: 14326
No3: 14366
No4: 14036
No5: 14252
No6: 14411
No7: 14359
记得看过一篇文章说floor比较有效率? 或是(小数点)进位比较准确?
比起类似的函式如ceil
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.76.198
※ 编辑: tomin 来自: 140.122.76.198 (02/08 17:51)
1F:推 s25g5d4:如果用ceil还要 -1 所以我才用floor 02/08 20:39
2F:→ s25g5d4:其实最早的时候我用round 才有此疑问 02/08 20:39
3F:→ s25g5d4:当初真是囧rz 居然用round 然後遇到10就丢给0 统计下来 02/08 20:40
4F:→ s25g5d4:好像还蛮平均的?! 02/08 20:40
5F:推 jtmh:其实这个画数线分段归类就可以大概知道了,用 round 的话如原 02/08 22:54
6F:→ jtmh:po 的方法也是行得通,不过缺点是比较不直觉,程式较复杂。 02/08 22:55