gpt4 book ai didi

Java将两个整数从1到0转换为 double 型

转载 作者:行者123 更新时间:2023-12-01 16:51:27 26 4
gpt4 key购买 nike

我正在使用 ISAAC 实现来生成随机整数。我需要用这些整数创建一个高斯值。首先,我需要将它们从 0 更改为 1 的 double 值。我怎样才能在Java中做到这一点?这是到目前为止我将整数转换为 double 的内容,但它仍然需要处于正态分布中。我还使用 java.util.Random.nextGaussian() 逻辑将 double 转换为高斯。

public double nextDouble() {
long l = ((long)(nextInt()) << 32) + nextInt();
return Double.longBitsToDouble(l);
}

最快的方法是什么(CPU周期方面)来做到这一点?

最佳答案

如果您想无论如何使用 ISAAC,请使用 64 位版本,该版本为您提供 nextLong() 作为原语。生成一个 double 值就很简单了

protected static final double DOUBLE_NORM = 1.0 / (1L << 53);

public double nextDouble() {
return (nextLong() >>> 11) * DOUBLE_NORM;
}

从那里您可以继续使用 Marsaglia 的极坐标方法作为 nextGaussian() 方法,与 java.util.Random 中的操作方式相同

编辑:几年前我测试过 32 位和 64 位 ISAAC。当然,我不记得确切的数字,但如果您确实需要 64 个随机位,您可能会惊讶地发现 64 位版本可以获得多得多的吞吐量。

编辑 2:如果您还需要整数的 32 个随机位,那么您当然会在 64 位算法上浪费大量工作(这里 32 位肯定更快)。在我的工作中,我主要需要 double ,因此 64 位是最佳选择(对我来说)。

编辑 3:nextFloat() 将是

protected static final float FLOAT_NORM = 1.0F / (1 << 24);

public float nextFloat() {
return (nextLong() >>> 40) * FLOAT_NORM;
}

关于Java将两个整数从1到0转换为 double 型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39259824/

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