- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
自从听说 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/
Java 8 添加了一个名为 SplittableRandom 的随机数生成器,它似乎是为了与流一起使用。但是,尚不清楚它比 ThreadLocalRandom 有何优势或更有用。从阅读文档来看,算法
我正在开发一个网络应用程序,我需要为每个请求生成一个随机数。该请求将命中一组存储桶中的特定存储桶。为给定桶生成的随机数应该具有均匀分布。我计划使用一个具有 SplittableRandom 实例的 m
自从听说 java 的 SplittableRandom 以来,我一直在使用它,因为它速度快,而且不需要多线程。然而,虽然它几乎包含了 Random 类的所有方法,但它并没有随 nextFloat()
我是一名优秀的程序员,十分优秀!