我正在阅读 Bjarne Stroustrup 的《Programming-Principles And Practice Using C++》一书,目前我被第 4 章的第 5 个“练习”问题难住了。
有一系列问题,目的是构建一个复杂的 If-Else If-Else 语句,我认为我理解背后的逻辑。然而,第五个问题难倒了我:“改变程序,如果两个数字相差小于 1.0/100,则在写出较大者和较小者后,它会写出数字几乎相等。”无论出于何种原因,我无法让“If 语句”在 0.5 之外的浮点值之间正确计算。或者,换句话说,只有当两个值的差等于 0.5 时,它才会正确地计算出上面列出的输出。
这是我的代码:
int main() {
double i = 0;
double j = 0;
while (std::cin >> i >> j) {
std::cout << "\n";
std::cout << i << "\t" << j << "\n" << "\n";
if (i - j == 0.01) {
std::cout << "The Two Numbers Are Almost Equal" << "\n";
}
else if (i > j) {
std::cout << "The Larger Value Is " << i << "\n";
}
else if (i == j) {
std::cout << "The Numbers Are Equal" << "\n";
}
else {
std::cout << "The Larger Value Is " << j << "\n";
}
}
}
我什至尝试在相同的前提下创建一个基本的 if-else 语句,但编译器仍然不会评估第一个条件的正确语句。有什么帮助吗?
那是因为浮点数的比较方式。不要检查是否完全相等
(i - j == 0.01)
,而是将它们的绝对差异与阈值进行比较。变化:
if (i - j == 0.01)
致:
if (std::abs(i - j) < 0.01)