看板 Ajax 關於我們 聯絡資訊
※ 引述《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)
s25g5d4:如果用ceil還要 -1 所以我才用floor 02/08 20:39
s25g5d4:其實最早的時候我用round 才有此疑問 02/08 20:39
s25g5d4:當初真是囧rz 居然用round 然後遇到10就丟給0 統計下來 02/08 20:40
s25g5d4:好像還蠻平均的?! 02/08 20:40
jtmh:其實這個畫數線分段歸類就可以大概知道了,用 round 的話如原 02/08 22:54
jtmh:po 的方法也是行得通,不過缺點是比較不直覺,程式較複雜。 02/08 22:55