2016-02-26 136 views
0

每當我輸入了一些在這個程序中的程序返回的值是1小於實際結果......這裏有什麼問題?冪函數返回1更少結果

#include<stdio.h> 
#include<math.h> 
int main(void) 
{ 
    int a,b,c,n; 

    scanf("%d",&n); 

    c=pow((5),(n)); 

    printf("%d",c); 

} 

enter image description here

+0

int int int int – user3528438

+3

你的意思是,當你輸入「2」時結果是「24」? – Ctx

+0

@ user3528438是'int? –

回答

0

pow()需要double參數,並返回double

如果返回值存儲到int和打印,您可能不會得到想要的結果。

+1

假設'double'可以預期具有〜53位的精度,而'int'通常只有32位,原因不是轉換本身,而是'pow()'算法中的不準確性。 – EOF

2

pow()返回double,從doubleint的隱式轉換是「舍入到零」。

所以它取決於pow()功能的行爲。

如果它是完美的,然後沒問題,轉換是準確的。

如果不是:

1)的結果爲稍大,則轉換將圓它下降到期望值。

2)如果結果略小,則轉換將全面下降,這是你所看到的。

溶液:

變化轉化爲「舍入到最接近的整數」通過使用rounding functions

c=lround(pow((5),(n))); 

在這種情況下,只要pow()具有小於+ -0.5錯誤你會得到預期的結果。

0

如果您需要大的數字準確的結果,你應該使用任意精度數學庫像GMP。這很容易:

#include <stdio.h> 
#include <math.h> 
#include <gmp.h> 

int main(void) { 
    int n; 
    mpz_t c; 

    scanf("%d",&n); 
    mpz_ui_pow_ui(c, 5, n); 
    gmp_printf("%Zd\n", c); 

    return 0; 
}