Re: [問題] random設定範圍、最小(大)值

看板Ajax作者 (藍藍紫黃橘 粉灰白綠咖)時間14年前 (2011/02/08 17:48), 編輯推噓2(204)
留言6則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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)

02/08 20:39, , 1F
如果用ceil還要 -1 所以我才用floor
02/08 20:39, 1F

02/08 20:39, , 2F
其實最早的時候我用round 才有此疑問
02/08 20:39, 2F

02/08 20:40, , 3F
當初真是囧rz 居然用round 然後遇到10就丟給0 統計下來
02/08 20:40, 3F

02/08 20:40, , 4F
好像還蠻平均的?!
02/08 20:40, 4F

02/08 22:54, , 5F
其實這個畫數線分段歸類就可以大概知道了,用 round 的話如原
02/08 22:54, 5F

02/08 22:55, , 6F
po 的方法也是行得通,不過缺點是比較不直覺,程式較複雜。
02/08 22:55, 6F
文章代碼(AID): #1DKH5VGh (Ajax)
文章代碼(AID): #1DKH5VGh (Ajax)