2016-04-19 5 views
3

高速逆平方根計算についてWikipedia articleを見つけました。このサンプルコードに興味のある行がいくつかありました。Java:暗黙の変換なしでintをfloatとして読み込み、

y = number; 
i = * (long *) &y; 
i = 0x5f3759df - (i >> 1); 
y = * (float *) &i; 

これはC言語で書かれており、その意味では意味がありますが、真のポインタなしでJavaで同じ効果を達成する方法はありますか?

答えて

0

(あなたがしなければならない場合や、安全でない)あなたは、たとえばのByteBufferを使用することができます

ByteBuffer bb = ByteBuffer.allocate(4); 
// y = number 
// i = * (long *) &y; // assuming long is 32-bit, not long long 
bb.putFloat(0, number); 
int i = bb.getInt(0); 
// i = 0x5f3759df - (i >> 1); 
i = 0x5f3759df - (i >> 1); 
// y = * (float *) &i; 
bb.putInt(0, i); 
float y = bb.getFloat(0); 

代わりのByteBufferのか、メモリのトリックを使用して、あなたは

// y = number; 
float y = number; 
// i = * (long *) &y; 
int i = Float.floatToRawIntBits(f); 
// i = 0x5f3759df - (i >> 1); 
i = 0x5f3759df - (i >> 1); 
// y = * (float *) &i; 
y = Float.intBitsToFloat(i); 
を行うことができます