幂函数返回减去 1 的结果

Tou*_*pto 2 c double int pow

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

在此输入图像描述

use*_*438 5

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

所以这取决于pow()函数的行为。

如果完美那就没问题,转换是准确的。

如果不:

1)结果稍大,则转换将其向下舍入为期望值。

2)如果结果稍小,则转换将向下舍入,这就是您所看到的。

解决方案:

使用舍入函数将转换更改为“舍入到最接近的整数”

c=lround(pow((5),(n)));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只要pow()误差小于+-0.5,您就会得到预期的结果。