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)
为什么结果错了?
您的问题是您正在使用浮点数学混合整数变量.我敢打赌,结果5^3是一样的东西124.999999,由于四舍五入的问题,当铸造成整型变量GET floor版来124.
有三种方法可以解决这个问题:
更安全地混合浮动数学和整数
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)
但是使用它将始终存在舍入错误的风险,从而影响结果,尤其是对于较高的指数.
仅计算浮动变量
所以int用float或替换double.这比#1更安全,但在某些情况下仍然无法使用(取决于任务).并且可能偶尔会偶尔floor,ceil,round获得想要的结果.
仅使用整数数学
这是最安全的方式(除非你越过int极限).本pow可以在整数运算来计算相对容易地看到: