簡體   English   中英

c ++:計算大功率的正確方法否

[英]c++ : correct way to calculate power for large no

我正在嘗試使用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 )

我讀了有關雙重性的文章,但沒有得到解決方案。

C ++本身不支持您嘗試使用其標准數據類型進行的操作。 您至少需要104位才能表示從0到67 ^ 17的每個整數。

如果您覺得近似值對您已經足夠了,那么您可以做的最好的事情就是使用包含的冪函數的long double版本:

#include <cmath>

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

但是,由於65 ^ 17是奇數(最后一個十進制數字是5),因此您將不會獲得正確的輸出,因此將需要至少具有104位尾數的浮點類型( long double精度通常沒有)。

為了得到一個正確的答案,就需要使用更高的精度庫,如GMP ,它具有可容納比你reqire的104位方式更多類型,並提供像自己的,快速的冪函數

有電源功能。 http://www.cplusplus.com/reference/cmath/pow/

只包括

#include <math.h> 

要么

 #include <cmath> 

接着

pow(65,17);

您應該使用Bignum庫gmp處理標准c ++類型無法處理的大型數據類型。 http://gmplib.org/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM