gpt4 book ai didi

algorithm - float 是生成无偏随机数的安全替代方法吗

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:55 25 4
gpt4 key购买 nike

我总是通过丢弃有偏范围内的任何数字来生成无偏随机数。类似这样

int biasCount = MAX_INT % max
int maxSafeNumber = MAX_INT - biasCount;
int generatedNumber = 0;

do
{
generatedNumber = GenerateNumber();

} while (generatedNumber > maxSafeNumber)

return generatedNumber % max;

今天,一位 friend 向我展示了他如何通过将生成的数字转换为 float ,然后将其乘以最大值来生成随机数。

float percent = generatedNumber / (float)MAX_INT; 
return (int)(percent * max);

这似乎解决了偏差问题,因为首先不必使用模数。它看起来也简单快速。 有什么理由可以说明 float 方法不如第一种方法安全(无偏见)吗?

最佳答案

  • 带底板的 float 方法(即您的类型转换)引入了偏差与您范围内的最大值相对。

    为了返回 maxgeneratedNumber == MAX_INT 必须为真。所以 max 的概率为 1/MAX_INT,而范围有概率 max/MAX_INT

  • 正如 Henry 指出的那样,如果 MAX_INT 也存在别名问题不是 max 的倍数。这使得范围内的一些值更多可能比其他人。 maxMAX_INT 之间的差异越大,这个偏差就越小。

(假设您获得并想要均匀分布。)

GoingNative 2013 的 Stephan T. Lavavej 的这篇演讲讨论了随机数的许多常见谬误,包括这些范围方案。它的实现以 C++ 为中心,但所有概念都适用于任何语言: http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful

关于algorithm - float 是生成无偏随机数的安全替代方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19630061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com