在说明问题之前我们先看一段代码
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int i=1;i<5000;i++){
if(2.0*pow(i,1.0/3)-3.0*pow(i,1.0/4)==8.0){
cout<<i;
break;
}
}
return 0;
}
这道题答案是4096,当i=4096,2.0*pow(i,1.0/3)是整数32,3.0*pow(i,1.0/4)是整数24,但是这个代码没运行出结果,是空的!!!
其实这段代码是有问题的,就是浮点数类型计算不能用==判定,下面是正确的方法
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int i=1;i<5000;i++){
double res=2.0*pow(i,1.0/3)-3.0*pow(i,1.0/4);
if(abs(res-8.0)<0.00001){//abs是计算绝对值的
cout<<i;
break;
}
}
return 0;
}
浮点数存在精度问题,所以一般不用“==”判定,而是设置一个比较小的阀值,如果结果和目标的相差的数值小于该阀值,则判定为相等