デジタル - 顔の質問16-オファー電力値整数の安全性を証明

/ * 
タイトル:
	機能のダブルパワー(ダブルベース、int型の指数を実装して 、) 
	指数力の基盤を求めています。
* / 
/ * 
思考:
	必要性はもっと考慮すべきことをケース:
		1,0エラーの負のパワー。
		図2に示すように、0の二値が決定され、精度が必要。
		3、指数が負の数であることを検討してください。
	「革新的な点をS:
		検索X(n乗)、使用可能なX(N / 2乗)×2(N / 2乗)xが偶数である
		X(n乗)を見つけ、利用できるX(N / 2乗)* 2(N / 2乗)* xxは奇数である
* / 
の#include <iostreamの> 
する#include <string.hの> 
する#include <アルゴリズム> 
の#include <cmath> 
使用して名前空間STD; の#define MIN_VALUE-1E 8 

BOOL g_InvalidInput偽へ=; 

BOOL equal0(ダブルNUM1){ 
    真のIF(ABS(NUM1)<MIN_VALUE)リターン; 
    偽に戻ります。 
}
PowerWithUnsignedExponentダブル(ダブルベース、unsigned int型を指数部){ 
    IFは、{(== 0指数部)
        ;リターン1 
    } 
    {(1 ==を指数部)IF 
        、ベースを返す
    } 
	によって代わりに除算の//ビット演算
    二重結果= PowerWithUnsignedExponent(ベース、指数1 >>); 
    結果=結果*; 
	//指数が奇数より必要性によって、決定されます。
	代わりにモジュロを使用する//ビット演算
    IF {(==&0x1のを指数部1)
        の検索結果* BASE =; 
    } 
    リターン結果; 
} 

ダブルパワー{(ダブルベースは、INTを指数部)
    IF(equal0(塩基)&&指数部<0){ 
        g_InvalidInput真=に、
        リターン0.0; 
    }
    unsigned int型absExponent =(unsigned int型)(指数)。
    もし(指数<0){ 
        absExponent =(unsigned int型)( -指数)。
    } 
    二重結果= PowerWithUnsignedExponent(ベース、absExponent)。
    (指数<0){もし
        結果= 1.0 /結果。
    } 
    結果を返します。
} 


int型のmain(){ 
    COUT <<電源(2,9)<< ENDL。

}

   

おすすめ

転載: www.cnblogs.com/buaaZhhx/p/11861147.html