Java生成随机双精度

时间:2015-05-05 19:33:06

标签: java random double

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

所有教程仅显示如何在特定范围内生成,但我希望所有双打都可能。

是否有什么东西只是洗牌所有位并给我数字?

2 个答案:

答案 0 :(得分:7)

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

Random rand = new Random();

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

注意:Random仅产生2 ^ 48个可能的long值。您可以使用SecureRandom生成所有可能的64位值,但速度要慢得多。

就实数而言,您的rand为[-Double.MAX_VALUE,Double.MAX_VALUE]即使对于所有可能的表示,分布也是如此。

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

答案 1 :(得分:0)

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

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