如何从以下集合中选择一个随机数:
double
)。分发
在我的特定用例中,我不需要统一分发。然而,我在学术上对这种解决方案感兴趣。此外,制服可以(至少)以两种不同的方式解释:
答案 0 :(得分:2)
鉴于双精度是64位,你可以生成8个字节的随机性并使用NIO来获得相应的双精度,这应该提供完全覆盖,我认为......但它不会产生均匀分布。
Random random = new Random();
byte[] buffer = new byte[8];
random.nextBytes(buffer);
System.out.println(Math.abs(Math.round(ByteBuffer.wrap(buffer).getDouble())));
我一直在提醒自己,通过查看double 64 binary layout,Java中如何表示双打,指数有11位,分数有52位。我认为提供统一分布的答案非常棘手
答案 1 :(得分:0)
我想到了以下未经测试的方法。
在[0,Double.MAX_VALUE]中分布均匀。
BigInteger
。doubleValue()
挑选每个可能值的概率相等。