go - 生成可以返回所有可能值的均匀随机浮点数
问题描述
在 [0,1) 中生成随机 float64 的一种简单方法是在 [0,2⁵³) 中生成均匀随机的 int 并将其除以 2⁵³。这基本上就是rand.Float64()
正在做的事情。但是,并非所有可能的介于 0 和 1 之间的 float64 值都可以通过这种方式生成:例如,如果该值小于 2⁻⁴,则有效数的最后 4 位始终为 0。或者,更简单地说, naive 方法总是返回 2⁻⁵³ 的倍数,并且并非所有介于 0 和 1 之间的浮点数都是 2⁻⁵³ 的倍数。
你如何生成一个均匀随机的 float64,比如每个可能的值都有机会被返回?(这里,均匀随机意味着在实数区间[0,1)上:从概念上讲,我想在 0 和 1 之间选择一个均匀随机实数并返回最接近的浮点数。)
对于上下文,我需要这个,因为我正在实施这篇论文,并且假设“表示 0 和 1 之间的所有可能值”对于保持结果至关重要。
解决方案
好吧,我相信标准方法是生成最多 1074 位的整数并将其映射到双精度。请注意,您的 RNG 应具有至少 1074 位长的内部状态。
参考实现:http: //xoshiro.di.unimi.it/random_real.c
关于它的讨论:http: //xoshiro.di.unimi.it/
另一个很好的链接:https ://lemire.me/blog/2017/02/28/how-many-floating-point-numbers-are-in-the-interval-01/
推荐阅读
- ios - iOS 13,关于变换属性的 CoreData 崩溃
- javascript - 多次通话后承诺不起作用
- azure - Azure 上的 Docker Solr 容器 - write.lock 文件在 1970-01-01T00:00:00Z 被外力更改
- python - 想要在现有的 python 代码中运行一个循环
- c# - Linq c# sum 列表中的任何对象> int
- angular - 重新加载页面后保持元素位置 - 拖放 cdk Angular 7
- c# - Blazor 服务器端支持的浏览器
- selenium-webdriver - 断言链中的最后一个断言失败 - 将所有先前通过的断言显示为失败
- c# - 是否可以在多个 git 存储库的根文件夹中共享单个文件?
- json - 安装时出现 Progressive Web App 问题(无缩略图)