Computer >> Máy Tính >  >> Lập trình >> C ++

Căn bậc hai nghịch đảo nhanh trong C ++

Trong bài toán này, chúng ta được cung cấp một số nguyên x. Nhiệm vụ của chúng tôi là tính toán Căn bậc hai nghịch đảo nhanh ( ) của một số dấu phẩy động 32 bit.

Thuật toán tìm căn bậc hai nghịch đảo của số được sử dụng nhiều trong lập trình, chẳng hạn như chuẩn hóa vectơ trong trò chơi điện tử, trong đồ họa 3D, v.v.

Thuật toán:

Bước 1: Thuật toán chuyển đổi giá trị dấu phẩy động thành số nguyên.

Bước 2: Hoạt động trên giá trị số nguyên và trả về giá trị gần đúng của căn bậc hai nghịch đảo.

Bước 3: Chuyển đổi giá trị số nguyên trở lại dấu phẩy động bằng cách sử dụng cùng một phương pháp được sử dụng trong bước 1.

Bước 4: Tính gần đúng được thực hiện để cải thiện độ chính xác bằng cách sử dụng phương pháp của Newton.

Chương trình minh họa hoạt động của thuật toán:

Ví dụ

#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;
}

Đầu ra -

The inverse square root of the number 256 is 0.0623942