在python中生成随机科学记数法浮点数



我想生成以科学记数法打印的随机浮点数,介于x和y之间。

我试过这个:

'%.2E' % random.uniform(1.0e5,3.0e10)

但这不断产生 1.0e8 和 3.0e10 之间的数字,并且永远不会低于 !还有其他办法吗?我希望生成的数字不仅仅集中在域的上限!

谢谢

放心,会有正确范围内的数字。

想想就知道了。105 和 108 之间有多少个数字(让我们取整数进行简化)?

10

8 和 3*1010 之间有多少?提示:大约是其300倍。

正如 Tim 已经说过的,1e8 和

1e10 之间的随机数的概率比 1e5 和 1e8 之间的概率大得多,所以只是你的样本不包含这些——这是绝对可能的。

一个简单的测试可以证明:

>>> [random.uniform(1.0e5, 3.0e10) < 1e8 for _ in range(10000)].count(True)
33

所以确实有低于1e8的数字;只是很少,不到百分之一。

现在,根据你在做什么,你可能只对生成"好看"的科学记数法感兴趣,而数字实际上并没有均匀分布。在这种情况下,您可以获得两个随机数,一个确定系数,另一个确定指数:

'{:.2e}'.format(random.uniform(1.0, 3.0) * 10 ** random.randint(5, 10))

如前所述,这不会产生均匀分布的随机数;因此,根据您的应用程序,这可能根本无济于事。但至少这些数字会"看起来更随机"。

最新更新