幂函数返回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);
}
答
pow()
返回double
,从double
到int
的隐式转换是“舍入到零”。
所以它取决于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;
}
int int int int – user3528438
你的意思是,当你输入“2”时结果是“24”? – Ctx
@ user3528438是'int? –