我一直生成無偏隨機數通過扔掉偏差範圍內的任何數字。與此相似漂浮一個安全的替代產生一個無偏的隨機數
int biasCount = MAX_INT % max
int maxSafeNumber = MAX_INT - biasCount;
int generatedNumber = 0;
do
{
generatedNumber = GenerateNumber();
} while (generatedNumber > maxSafeNumber)
return generatedNumber % max;
今天一個朋友告訴我,他如何生成的數字轉換成浮點數,則乘以產生的隨機數,打擊最大。
float percent = generatedNumber/(float)MAX_INT;
return (int)(percent * max);
這似乎通過首先不必使用模量來解決偏差問題。它看起來也簡單而快速。 爲什麼浮動方法不會像第一個那樣安全(沒有偏見),是否有任何理由?
你爲什麼認爲它可能不安全*? – Raedwald
最好的方法是使用您的語言提供的範圍隨機。例如,C++提供了包含這種功能的''。 –
Adam
「安全」可能不是您要查找的術語。只要說「沒有偏見」。 – jamesdlin