幂函数返回1更少结果

问题描述:

每当我输入了一些在这个程序中的程序返回的值是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? –

pow()需要double参数,并返回double

如果返回值存储到int和打印,您可能不会得到想要的结果。

+1

假设'double'可以预期具有〜53位的精度,而'int'通常只有32位,原因不是转换本身,而是'pow()'算法中的不准确性。 – EOF

pow()返回double,从doubleint的隐式转换是“舍入到零”。

所以它取决于pow()功能的行为。

如果它是完美的,然后没问题,转换是准确的。

如果不是:

1)的结果为稍大,则转换将圆它下降到期望值。

2)如果结果略小,则转换将全面下降,这是你所看到的。

溶液:

变化转化为“舍入到最接近的整数”通过使用rounding functions

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

在这种情况下,只要pow()具有小于+ -0.5错误你会得到预期的结果。

如果您需要大的数字准确的结果,你应该使用任意精度数学库像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; 
}