Presentation is loading. Please wait.

Presentation is loading. Please wait.

The Mathematics Behind the Fast Inverse Square Root Function Code

Similar presentations


Presentation on theme: "The Mathematics Behind the Fast Inverse Square Root Function Code"β€” Presentation transcript:

1 The Mathematics Behind the Fast Inverse Square Root Function Code
0x5f3759df The Mathematics Behind the Fast Inverse Square Root Function Code McEniry, Charles 2007 November 2014

2 Fast Inverse Square Root
Problem Application Compute Why normalization is called billions of times for lighting and reflection tasks

3 Q_rsqrt: Quake3 source code
float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // evil floating point bit level hacking i = 0x5f3759df - ( i >> 1 ); // what the fuck? y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration return y; }

4 2) Newton’s method: with initial solution
y= 1 √π‘₯ the function to minimize: f . =π‘¦βˆ’ 1 √π‘₯ 𝑦 𝑛+1 = 𝑦 𝑛 βˆ’ 𝑓( 𝑦 𝑛 ) 𝑓′( 𝑦 𝑛 ) Plugging 𝑓(𝑦 𝑛 ), f β€² 𝑦 𝑛 = 1 𝑦 2 βˆ’π‘₯,βˆ’ 2 𝑦 3 gives 𝑦(3βˆ’π‘₯ 𝑦 2 ) 2 =𝑦(1.5βˆ’ π‘₯ 𝑦 2 2 ) const float threehalfs = 1.5F; x2 = number * 0.5F; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration

5 1) Approximation of log_2(x) using Int(x)
1.1 Floating Point Representation 1.2 Float Perspective: 1.3 Integer Perspective 1.4 Finding int(y) from int(x) i = * ( long * ) &y; // evil floating point bit level hacking i = 0x5f3759df - ( i >> 1 ); // what the fuck? y = * ( float * ) &i;

6 0x5f3759df McEniry, Charles (August 2007).Β "The Mathematics Behind the Fast Inverse Square Root Function Code

7 0x5f3759df The integer aliased to a floating point number (in blue), compared to a scaled and shifted logarithm (in gray).


Download ppt "The Mathematics Behind the Fast Inverse Square Root Function Code"

Similar presentations


Ads by Google