কম্পিউটার টিউটোরিয়াল

C++-এ ফাস্ট ইনভার্স স্কয়ার রুট (Fast Inverse Square Root)

এই সমস্যায়, আমাদের একটি ইন্টিজার x দেওয়া হয়েছে। আমাদের কাজ হলো ৩২-বিট ফ্লোটিং পয়েন্ট সংখ্যার ফাস্ট ইনভার্স স্কয়ার রুট ক্যালকুলেট করা।

সংখ্যার ইনভার্স স্কয়ার রুট বের করার এই অ্যালগরিদম প্রোগ্রামিং-এ ব্যাপকভাবে ব্যবহৃত হয়, যেমন ভিডিও গেমে ভেক্টর নরমালাইজেশন, ৩ডি গ্রাফিক্স ইত্যাদি।

অ্যালগরিদম:

স্টেপ ১: অ্যালগরিদমটি ফ্লোটিং পয়েন্ট ভ্যালুকে ইন্টিজারে রূপান্তর করে।

স্টেপ ২: ইন্টিজার ভ্যালুতে অপারেশন করে ইনভার্স স্কয়ার রুটের এপ্রক্সিমেট ভ্যালু রিটার্ন করে।

স্টেপ ৩: স্টেপ ১-এ ব্যবহৃত পদ্ধতিতেই ইন্টিজার ভ্যালুকে আবার ফ্লোটিং পয়েন্টে রূপান্তর করে।

স্টেপ ৪: নিউটনের পদ্ধতি ব্যবহার করে এপ্রক্সিমেশন থেকে প্রিসিশন উন্নত করা হয়।

অ্যালগরিদমটি ব্যাখ্যা করে প্রোগ্রাম:

#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
  1. C++-এ সিমেট্রিক ট্রি (Symmetric Tree) চেক করার অ্যালগরিদম

  2. C++-এ বাইনারি ট্রি টিল্ট (Binary Tree Tilt) গণনা করা

  3. C++ এডাম নম্বর (Adam Number)

  4. সি++-এ NaN (Not a Number) কী?