0

C ++を使用して65 ^ 17を計算しようとしています。次のコードを書きましたが、 65^11 のときに間違った値を取得しました。答えを計算する正しい方法は何ですか? (つまり、65^17)

コード :

long double data= 1;
int m_ne=17;
int i_data=65;
for(int i=1;i<= m_ne;i++)
{
     data =  data  * (i_data);
     std::cout.precision(15);
     std::cout<<" "<<std::fixed <<data<<std::endl;
 }

出力:

65.000000000000000
 4225.000000000000000
 274625.000000000000000
 17850625.000000000000000
 1160290625.000000000000000
 75418890625.000000000000000
 4902227890625.000000000000000
 318644812890625.000000000000000
 20711912837890625.000000000000000
 1346274334462890625.000000000000000
 87507831740087890624.000000000000000

次のオプションを試しましたが、すべて無駄でした

1. data = floor( data +0.5) * i_data ;        

2. data = floor( data +0.5) * floor (i_data + 0.5 ) ;        
By declaring i_data as float .

3.
data =  data * i_data ;        
data = floor ( data + 0.5 )

ダブルについての投稿を読みましたが、解決策が得られません。

4

3 に答える 3

0

gmp標準の C++ 型では処理できない大きなデータ型を処理するには、Bignum ライブラリを使用する必要があります。http://gmplib.org/

于 2013-05-16T08:40:41.527 に答える