每当我在这个程序中输入一个数字时,程序都会返回一个比实际结果小 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);
}
Run Code Online (Sandbox Code Playgroud)

pow()返回 a ,从to 的double隐式转换是“向零舍入”。doubleint
所以这取决于pow()函数的行为。
如果完美那就没问题,转换是准确的。
如果不:
1)结果稍大,则转换将其向下舍入为期望值。
2)如果结果稍小,则转换将向下舍入,这就是您所看到的。
解决方案:
c=lround(pow((5),(n)));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,只要pow()误差小于+-0.5,您就会得到预期的结果。