在C++中,<之一,==和>保证在浮点数上是正确的吗?



在C++中,我是否可以保证,对于任何给定的float afloat ba < ba == ba > b中只有一个是真的?

如果编译器和平台之间存在差异,我会对x86上的Visual C++感兴趣。

否。

对于a < ba == ba > b中的每一个为假,abNaN就足够了。

如果ab都是非NaN,则a < ba == ba > b中的恰好一个必须为真。

作为补充,这个答案告诉您如何在C++中获得一个NaN值(有几个NaN值,可以通过检查它们的表示来区分;它们彼此不同,因为NaN从不等于任何东西),以及如何测试一个值是否为NaN(查看变量x是否为NaN的惯用测试是x != x,实际上std::isnan()通常是以这种方式实现的,但一些必须阅读代码的程序员可能会对此感到困惑)。

然后,如果ab是先前计算的结果,则存在精度过高的问题。关于C中的讨论,请参阅本文。C99标准通过明确哪些地方可能出现和不可能出现超精度来解决这个问题,但尽管C++或多或少地继承了这些规则,在cfloat中对FLT_EVAL_METHOD的定义遵循了C标准,但在实践中,C编译器比C++编译器更重视这些规则。例如,GCC在使用-std=c99编译时实现了C的规则,在这种情况下,您可以依赖于要保存的属性,但在撰写本文时,GCC在用作C++编译器时不实现这些规则。

相关内容

  • 没有找到相关文章

最新更新