我总是通过丢弃有偏范围内的任何数字来生成无偏随机数。与此类似
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);
这似乎通过首先不必使用模数来解决偏差问题。它看起来也简单快速。浮动方法不像第一个方法那样安全(无偏见)有什么原因吗?