遇到问题:
string bmi(double w, double h)
{
string answer;
double bmi = w / (h*h);
cout << setprecision(9) << bmi << endl;
if (bmi <= 18.5) {
answer = "Underweight";
} else if (bmi <= 25.0){
answer = "Normal";
} else if (bmi <= 30.0){
answer = "Overweight";
} else {
answer = "Obese";
}
return answer;
}
int main() {
cout << bmi(81.585, 2.1) << endl;
cout << bmi(90.25, 1.9) << endl;
cout << bmi(86.7, 1.7) << endl;
cout << bmi(200, 1.6) << endl;
return 0;
}
3呼叫必须给予&#34;超重&#34;回答,但反而扔掉了#Obese&#34;,我做错了什么?
答案 0 :(得分:1)
这只是有限精度表示的本质。我将以十进制显示一个示例:
假设您代表1/3为&#34; 0.333333&#34;。如果你计算(1/3 + 1/3 + 1/3),你会得到&#34; 0.999999&#34;而不是&#34; 1.0&#34;。因此,如果你检查它是否大于或等于1,你将得到错误。
正如1/3没有精确的十进制表示,1/10没有精确的二进制表示。因此,在需要确切答案的应用程序中,不要使用有限精度数字。