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....% 的机会大于内存中可表示的任何数字,即使你拥有宇宙中的每个原子作为记忆。
你必须选择一个范围,期间。
如何在 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....% 的机会大于内存中可表示的任何数字,即使你拥有宇宙中的每个原子作为记忆。
你必须选择一个范围,期间。