C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での高速逆平方根


この問題では、整数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

  1. C++の対称ツリー

    二分木があり、それがそれ自体の対称性を構築するかどうかをチェックすることがタスクであると仮定しましょう。対称二分木はそれ自体の鏡像を構築します。 例 入力-1: 出力: True 説明: 与えられた二分木はそれ自体の鏡像を構築するので、出力はTrueです。 入力-2: 出力: False 説明: 与えられた二分木はそれ自体の鏡像を作らないので、対称的ではありません。 この問題を解決するためのアプローチ 対称二分木は、それ自体の鏡像であるツリーです。つまり、ツリーの左右のノードが同じであるかどうかを確認する必要があります。 ブール関数は、

  2. C++での二分木傾斜

    二分木のルートノードがあるとしましょう。タスクは、すべてのノードの傾きの合計を見つけて返すことです。 傾斜 バイナリツリーの例は、各レベルの左側のサブツリーと右側のサブツリーの子ノードの絶対差を見つけることによってバイナリツリーを構築することに他なりません。ある特定のレベル、つまり子ノードを持たないノードでは、そのノードをゼロに置き換えるだけで傾斜します。 例 入力 出力:15 説明: 与えられた二分木のすべてのレベルで傾きを見つける ノード3の傾き=0 ノード5の傾き=0 ノード7の傾き=0 ノード2の傾き=abs(3-5)=2 ノード9の傾き=ab