在C ++中,正确的是<,==和>中的一个,在float上保证是真的?
在C ++中,我是否有保证,对于任何给定的float a
和float b
,只有一个a < b
, a == b
和a > b
是真的?
如果这在编译器和平台之间有所不同,我对x86上的Visual C ++感兴趣。
没有。
a
或b
对于a < b
, a < b
, a == b
和a > b
每a < b
都是假的就足够了。
如果a
和b
都不是NaN,那么a < b
, a == b
或a > b
中的一个必须是真的。
作为补充,这个答案告诉你如何在C ++中获得一个 NaN值(有几个NaN值,可以通过检查它们的表示来区分它们;因为NaN永远不会等于任何东西)你可以testing一个值是否是一个NaN(一个习惯性testing,看一个variablesx
是否是NaN是x != x
,事实上std::isnan()
通常是这样实现的,但是一些程序员必须阅读你的代码可能会被它弄糊涂)。
然后,如果a
和b
是先前计算的结果,则存在精度过高的问题。 请参阅本文以获得关于C的讨论.C99标准通过使规则明确规定超出精度可能发生和不可能发生的地方来解决问题,但是尽pipeC ++或多或less地inheritance了C标准,但仍然遵循C标准来定义FLT_EVAL_METHOD
在实践中,C编译器比C ++编译器更重视规则。 例如GCC在使用-std=c99
编译时实现C的规则,在这种情况下,您可以依赖该属性来保存,但是在编写本文时,GCC在用作C ++编译器时不会实现这些规则。