如何解决在fortran90/95或Python中生成两个大整数之间的均匀随机数
我想在 fortran90/95 或 Python 中的 [2E16,5E20] 之间生成一些统一的随机数。我知道如果“R”是零到一之间的随机数(0 R = (b-a)*r + a. 但是当我使用这个算法在 [2E16,5E20] 之间生成一些随机数时,大多数生成的随机数都非常接近 5E20。我知道为什么会发生这种情况,正因为如此,术语 BA 大约等于 B(因为 B 比 A 大),并且大多数生成的随机数都放在 B 或 B/10 的幅度内(我的意思是它非常接近 B)。 我该如何解决这个问题? 我尝试应用的一个解决方案是,我将 [2E16,5E20] 区间拆分为更小的区间,例如: [2e16,2e17],[2e17,2e18],[2e18,2e19],[2e19,2e20],[2e20,5e20]。 我在上述每个间隔之间生成了一些随机数。 还有其他解决办法吗?我的解决方案是否正确?
解决方法
这与其说是编程问题,不如说是数学问题。
您需要考虑从哪个分布中抽取随机数。任何跨越几个数量级的 uniform distribution 总是会产生更多指数较大的数字,而不是指数较小的数字。
如果你想要一个每个指数产生相同数量数字的分布,你应该考虑log uniform distribution,它可以使用例如采样scipy.stats.loguniform。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。