これを使用する前に、コードをベンチマークすることを忘れないでください。
それが必要ないことが判明した場合、または使用している CPU アーキテクチャで遅いことが判明した場合は、プロジェクトにこの鈍いコードを含めない方がよいでしょう。
Java ライブラリには、浮動小数点数から raw ビットを取得する方法があります。
java.lang.Float
( http://docs.oracle.com/javase/6/docs/api/java/lang/Float.html )のJavadocに見られるように、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