【发布时间】:2019-12-10 08:29:28
【问题描述】:
在浮点数的c++标准中,有std::isgreater比较大,std::isless比较少,那为什么没有std::isequal比较相等呢?是否有一种安全准确的方法来检查double 变量是否等于标准定义的DBL_MAX 常量?我们尝试这样做的原因是我们通过服务协议访问数据,它定义了一个双字段,当没有数据可用时它将发送DBL_MAX,所以在我们的客户端代码中,当它是DBL_MAX时,我们需要跳过它,以及我们需要处理的任何其他内容。
【问题讨论】:
-
因为比较浮点数的相等性并不好,因为它们容易出现舍入错误。我认为this question 会帮助你。
-
请查看问题右侧的相关问题列表,其中许多会解释为什么浮点相等比较通常是不可能的。
-
比较本质上不准确的数字是否相等有什么实际用途?特别是
DBL_MAX,这是一个荒谬的巨大数字,精度低得荒谬?如果您告诉我们您到底想要做什么,也许我们可以找到更好的解决方案来实现这一目标。 -
为什么不
a==b? -
@fluter 如果你“在某处读到” "operator
==不适用于float/double" 那么你需要做更多的阅读,因为这不是真的。事实上,这完全是危险的。假设的std::isequal并不能解决问题。请参阅docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。
标签: c++ c++11 floating-point std