2013-05-16 56 views
0

我想用C++計算65^17。 我寫了下面的代碼,但65^11時出現錯誤值。 什麼是計算答案的正確方法? (即65^17)C++:正確的方式來計算功率大沒有

代碼:

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) 

我讀張貼關於雙下面的選項,但所有,但我沒有得到解決方案。

+0

支持四路數學不是標準,什麼是編譯器?它是GCC嗎? – Mikhail

+0

此外:http://gcc.gnu.org/onlinedocs/libquadmath.pdf – Mikhail

回答

7

C++本身不支持你正在嘗試與它的標準數據類型做。您需要至少104位來表示0到67^17之間的每個整數。

如果你覺得一個近似是對你不夠好,你能做的最好的就是用long double版本附帶的電源功能:

#include <cmath> 

::std::cout << ::std::powl(65, 17) << ::std::endl; 

你不會得到但是,由於65^17是奇數(最後一位十進制數字是5),因此需要一個至少有104位尾數的浮點類型(其中long double通常不具有)。

爲了得到正確的答案,需要使用更高精度的庫,如GMP,它的類型可以保持超過您要求的104位,並提供自己的快速求冪函數,如this

+0

感謝您的及時迴應,我會檢查GMP選項 –