如何在Java中实现“快速逆平方根”?

我听说过这里讨论过的“快速逆平方根”,我想将其放入我的Java程序中(仅出于研究目的,因此请忽略有关本机库更快的任何内容)。

我在看代码,C代码直接将C转换floatint带有C指针魔术的。如果尝试使用强制转换在Java中执行此操作,则将无法正常工作:java会截断float(如您所愿),并且您将无法获取基元的指针(如在C中那样)。那你怎么做呢?

回答:

使用此方法之前,请记住先对代码进行基准测试。

如果事实证明您不需要它,或者您使用的CPU架构速度较慢,那么最好不要在项目中使用这些晦涩的代码。


Java库提供了一种从浮点数到原始位的方法。

如Javadoc

java.lang.Float(http://docs.oracle.com/javase/6/docs/api/java/lang/Float.html)所示,我们具有的floatToIntBits功能,以及intBitsToFloat

这意味着我们可以用Java编写“快速反平方根”,如下所示:

public static float invSqrt(float x) {

float xhalf = 0.5f * x;

int i = Float.floatToIntBits(x);

i = 0x5f3759df - (i >> 1);

x = Float.intBitsToFloat(i);

x *= (1.5f - xhalf * x * x);

return x;

}

这是双打的版本:

public static double invSqrt(double x) {

double xhalf = 0.5d * x;

long i = Double.doubleToLongBits(x);

i = 0x5fe6ec85e7de30daL - (i >> 1);

x = Double.longBitsToDouble(i);

x *= (1.5d - xhalf * x * x);

return x;

}

来源:http://www.actionscript.org/forums/showthread.php3?

t = 142537

以上是 如何在Java中实现“快速逆平方根”? 的全部内容, 来源链接: utcz.com/qa/412298.html

回到顶部