flu*_*ter 4 c++ floating-point std c++11
在c++标准的浮点数中,有std::isgreater大比较,std::isless小比较,为什么没有std::isequal等式比较呢?是否有安全准确的方法来检查double变量是否等于DBL_MAX标准定义的常量?我们尝试这样做的原因是我们通过服务协议访问数据,它定义了一个双字段,当没有数据可用时它会发送DBL_MAX,所以在我们的客户端代码中,当DBL_MAX我们需要跳过它时,我们需要跳过它处理它。
的利息isgreater,isless,isgreaterequal,islessequal相比>,<,>=并<=是他们没有提出FE_INVALID(浮点异常,这些都是不同的东西比C ++异常并没有被映射到C ++异常)与NaN的比较时,同时运营商做。
由于==不引发 FP 异常,因此不需要额外的功能。
请注意,还有islessgreater和isunordered。
如果您不考虑 NaN 或不测试浮点异常,则无需担心这些函数。
==如果您想检查值是否相同(忽略与带符号 0 和 NaN 相关的问题),可以考虑使用相等比较。根据您如何达到这些值,有时考虑近似相等比较是有用的——但不建议系统地使用一个比较,例如这种近似相等可能不是可传递的。
在网络协议的上下文中,您必须考虑数据是如何序列化的。如果序列化被定义为二进制,你可能可以重建确切的值,因此==是你想要的,所以比较DBL_MAX(对于其他值,检查为有符号 0 和 NaN 指定的内容,知道有信号和安静的 NaN 表示为不同的位模式,尽管 IEEE 754-2008 现在推荐其中之一)。如果表示是十进制的,则必须检查表示是否足够精确以使DBL_MAX值可重构(并注意舍入模式)。
请注意,我已经考虑使用 NaN 来表示没有可用数据的情况,而不是使用潜在的有效值。
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |