If 语句无法计算基本浮点问题

问题描述 投票:0回答:1

我正在阅读 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 语句,但编译器仍然不会评估第一个条件的正确语句。有什么帮助吗?

c++ if-statement while-loop floating-point double
1个回答
0
投票

那是因为浮点数的比较方式。不要检查是否完全相等

(i - j == 0.01)
,而是将它们的绝对差异与阈值进行比较。变化:

if (i - j == 0.01)

致:

if (std::abs(i - j) < 0.01)
© www.soinside.com 2019 - 2024. All rights reserved.