提问者:小点点

C++中比较浮点数


我正在从一个教程中学习C++,在那里,我被告知在C++中比较浮点数是非常复杂的。 例如,在下面的代码中:

#include <iostream>

using namespace std;

int main()
{
    float decimalNumber = 1.2;
    
    if (decimalNumber == 1.2){
        cout << "Equal" << endl;
    }else{
        cout << "Not equal" << endl;
    }

    return 0;
}

我会得到“不平等”。 我同意这一点。 导师告诉我们,如果我们需要比较浮动,我们可以使用>; 最接近的数字。 (那不是很精确)。 我在谷歌搜索了不同的比较浮动的方法,我得到了很多复杂的方法。

然后我自己创建了一个程序:

#include <iostream>

using namespace std;

int main()
{
    float decimalNumber = 1.2;
    
    if (decimalNumber == (float)1.2){
        cout << "Equal" << endl;
    }else{
        cout << "Not equal" << endl;
    }

    return 0;
}

在像上面那样的类型转换之后,我得到了“相等”。

我想知道的是,我应该使用上面的方式来比较我所有的程序中的浮动吗? 这有什么缺点吗?

注意:我知道一个数字是如何在内存中精确表示的,以及0.1+0.2!-0.3是如何在另一个SO问题中描述的。 我只想知道,我可以用上面的方式检查两个浮点数的相等吗?


共0个答案

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|浮点数)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?