在fortran90/95或Python中生成两个大整数之间的均匀随机数

2024-10-02 12:29:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用fortran90/95或Python在[2E16,5E20]之间生成一些统一的随机数。我知道如果“R”是一个介于0和1之间的随机数(0<;R<;1),我们可以将R转换为[a,B],如下所示:

R=(b-a)*R+a

但是当我使用这个算法在[2E16,5E20]之间生成一些随机数时,大多数生成的随机数都非常接近5E20。我知道为什么会发生这种情况,正因为如此,术语B-A大约等于B(因为B比A大),并且大多数生成的随机数都在B或B/10的范围内(我的意思是它非常接近B)

我怎样才能解决这个问题

我尝试应用的一个解决方案是,我将[2E16,5E20]间隔拆分为更小的间隔,例如:

[2e16,2e17],[2e17,2e18],[2e18,2e19],[2e19,2e20],[2e20,5e20]

我在上面的每一个间隔之间生成了一些随机数

还有其他解决办法吗?我的解决方案正确吗


Tags: lt算法间隔情况解决方案术语fortran90解决办法
1条回答
网友
1楼 · 发布于 2024-10-02 12:29:24

这不是一个编程问题,而是一个数学问题

您需要考虑从哪个分布中提取随机数。任何跨越几个数量级的uniform distribution总是会产生更多指数较大的数,而不是指数较小的数

如果你想用每个指数产生一个相同数量的分布,你应该考虑log uniform distribution,它可以用scipy.stats.loguniform来采样。

相关问题 更多 >

    热门问题