相关疑难解决方法(0)

如何正确比较整数和浮点值?

如何以正确的方式比较整数和浮点值?

内置比较运算符在某些情况下会给出错误的结果,例如:

#include <iomanip>
#include <iostream>

int main()
{
    long long a = 999999984306749439;
    float     b = 999999984306749440.f; // This number can be represented exactly by a `float`.

    std::cout << std::setprecision(1000);
    std::cout << a << " < " << b << " = " << (a < b) << '\n';
    // Prints `999999984306749439 < 999999984306749440 = 0`, but it should be `1`.
}
Run Code Online (Sandbox Code Playgroud)

显然,比较运算符在实际比较它们之前将两个操作数都转换为相同类型。在这里,lhs转换为float,这会导致精度损失,并导致错误的结果。

即使我了解发生了什么,也不确定如何解决此问题。


免责声明:该示例使用floatlong long,但我正在寻找一种通用解决方案,该解决方案适用于整数类型和浮点类型的每种组合。

c++ floating-point

7
推荐指数
1
解决办法
314
查看次数

标签 统计

c++ ×1

floating-point ×1