wut*_*aer 0 java random double
如何在Java中生成随机双精度?
所有教程仅显示如何在特定范围内生成,但我希望所有双打都可能.
有什么东西可以洗掉所有的位并给我数字吗?
你可以做的是生成一个随机的64位值.这可以给你Not-A-Number和+/- Infinity.
Random rand = new Random();
double d = Double.longBitsToDouble(rand.nextLong());
Run Code Online (Sandbox Code Playgroud)
注意:Random仅生成2 ^ 48个可能的long值.您可以使用SecureRandom生成所有可能的64位值,但速度要慢得多.
就实数而言,您的rand为[-Double.MAX_VALUE,Double.MAX_VALUE]即使对于所有可能的表示,分布也是如此.
你有大约1/4096的机会有NaN.您可以循环此操作以丢弃任何不需要的值.