इस समस्या में, हमें एक पूर्णांक x दिया गया है। हमारा कार्य 32-बिट फ्लोटिंग पॉइंट संख्या के फास्ट इनवर्स स्क्वायर रूट की गणना करना है।
संख्या के इनवर्स स्क्वायर रूट को खोजने का एल्गोरिदम प्रोग्रामिंग में बहुत उपयोगी है, जैसे वीडियो गेम में वेक्टर नॉर्मलाइज़ेशन, 3D ग्राफिक्स में, आदि।
एल्गोरिदम:
चरण 1: एल्गोरिदम फ्लोटिंग पॉइंट मान को पूर्णांक में परिवर्तित करता है।
चरण 2: पूर्णांक मान पर ऑपरेशन करें और इनवर्स स्क्वायर रूट का अनुमानित मान वापस करें।
चरण 3: चरण 1 में उपयोग की गई समान विधि का उपयोग करके पूर्णांक मान को वापस फ्लोटिंग पॉइंट में परिवर्तित करें।
चरण 4: न्यूटन की विधि का उपयोग करके सटीकता में सुधार के लिए अनुमान लगाया जाता है।
एल्गोरिदम की कार्यप्रणाली को दर्शाने वाला प्रोग्राम:
उदाहरण
#include<iostream>
using namespace std;
float calcInvSqRoot( float n ) {
const float threehalfs = 1.5F;
float y = n;
long i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
y = y * ( threehalfs - ( (n * 0.5F) * y * y ) );
return y;
}
int main(){
int n = 256;
float invSqRoot = calcInvSqRoot(n);
cout<<"The inverse square root of the number "<<n<<" is "<<invSqRoot;
return 0;
}
आउटपुट
The inverse square root of the number 256 is 0.0623942