Java 生成随机双

Java generate random double

如何在 Java 中生成随机双精度值?

所有教程只展示了如何在一定范围内生成,但我希望所有双打都可能。

有没有什么东西可以打乱所有位并给我数字?

您可以做的是生成一个随机的 64 位值。 这可以给你 Not-A-Number 和 +/-Infinity。

Random rand = new Random();

double d = Double.longBitsToDouble(rand.nextLong());

注意:随机只会产生 2^48 个可能的 long 值。您可以使用 SecureRandom 生成所有可能的 64 位值,但这要慢得多。

就实数而言,你的随机数是[-Double.MAX_VALUE,Double.MAX_VALUE] 对于所有可能的表示,分布是均匀的。

你有大约 1/4096 的机会得到 NaN。您可以循环此操作以丢弃任何不需要的值。

数字很大。如果理论上存在一种从 "all" 个数字中生成随机数的方法,那么这个数字有 99.99999....% 的机会大于内存中可表示的任何数字,即使你拥有宇宙中的每个原子作为记忆。

你必须选择一个范围,期间。