为什么pow(5,3)不返回125?

pri*_*yGK -3 c math pow calculation

当我使用该pow()功能时,有时结果是一个.例如,这段代码产生124,但我知道5³应该是125.

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

int main(){
    int i = pow(5, 3);
    printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)

为什么结果错了?

Spe*_*tre 8

您的问题是您正在使用浮点数学混合整数变量.我敢打赌,结果5^3是一样的东西124.999999,由于四舍五入的问题,当铸造成整型变量GET floor版来124.

有三种方法可以解决这个问题:

  1. 更安全地混合浮动数学和整数

    int x=5,y=3,z;
    z=floor(pow(x,y)+0.5);
    // or
    z=round(pow(x,y));
    
    Run Code Online (Sandbox Code Playgroud)

    但是使用它将始终存在舍入错误的风险,从而影响结果,尤其是对于较高的指数.

  2. 仅计算浮动变量

    所以intfloat或替换double.这比#1更安全,但在某些情况下仍然无法使用(取决于任务).并且可能偶尔会偶尔floor,ceil,round获得想要的结果.

  3. 仅使用整数数学

    这是最安全的方式(除非你越过int极限).本pow可以在整数运算来计算相对容易地看到: