可能重複:
John Carmack’s Unusual Fast Inverse Square Root (Quake III)這個C習語是什麼意思?
我碰到這段代碼就最近一個博客 - 它是從Quake3的引擎。這意味着使用Newton-Rhapson方法快速計算反平方根。
float InvSqrt (float x){
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
}
做什麼原因int i = *(int*)&x;
?做int i = (int) x;
反而給出了完全不同的結果。
我敢肯定這是不是C程序員之間的一個成語。 – nos 2010-08-10 19:01:57
將'float'強制轉換爲'int'完全不同於將'float'指針轉換爲'int'指針。此外,這種方法比'rsqrtss' x86指令慢得多,準確度也低。 – zneak 2010-08-10 19:06:10
我認爲,這是不是一個真正的重複,因爲它要求對'*爲(int *)&x',而不是魔術常量'0x5f3759df'這是其他問題的主要焦點。 – 2010-08-10 19:21:36