gpt4 book ai didi

java - 如何从 SplittableRandom 获取 nextFloat()?

转载 作者:行者123 更新时间:2023-11-30 07:55:49 25 4
gpt4 key购买 nike

自从听说 java 的 SplittableRandom 以来,我一直在使用它,因为它速度快,而且不需要多线程。然而,虽然它几乎包含了 Random 类的所有方法,但它并没有随 nextFloat() 一起提供。这是为什么?

现在,真正的问题是,我将如何着手创建 nextFloat 方法?看到double生成如下:(from JDK 8)

final double internalNextDouble(final double n, final double n2) {
double longBitsToDouble = (this.nextLong() >>> 11) * 1.1102230246251565E-16;
if (n < n2) {
longBitsToDouble = longBitsToDouble * (n2 - n) + n;
if (longBitsToDouble >= n2) {
longBitsToDouble = Double.longBitsToDouble(Double.doubleToLongBits(n2) - 1L);
}
}
return longBitsToDouble;
}

.. 我希望我可以使用以下代码将其转换为 32 位数字生成;

final float internalNextFloat(final float min, final float max) {
float intBitsToFloat = (this.nextInt() >>> 11) * 1.1102230246251565E-16f;
if (min < max) {
intBitsToFloat = intBitsToFloat * (max - min) + min;
if (intBitsToFloat >= max) {
intBitsToFloat = Float.intBitsToFloat(Float.floatToIntBits(max) - 1);
}
}
return intBitsToFloat;
}

但是,这会返回 0.000000。我只能假设它在某处溢出,在这种情况下,我很确定问题出在以下行:

(this.nextInt() >>> 11) * 1.1102230246251565E-16f;

那么,如果没有换档经验(我猜是使用 epsilon),我怎么能实现我想要的呢?

最佳答案

无需深入思考其中的数学原理,在我看来您可以只使用 nextDouble方法生成所需范围内的 double,然后将结果转换为 float

关于java - 如何从 SplittableRandom 获取 nextFloat()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42888737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com