浮点运算中 - ( - x)= x是否正确?

时间:2014-11-17 16:41:43

标签: floating-point ieee-754

假设x是浮点数,我想知道- ( - x)一般是否等于x

让我们忽略角落情况,例如x = max_floating_point_number / min_floating_number。

2 个答案:

答案 0 :(得分:9)

总的来说,是的;否定浮点值不会导致错误或精度损失。 (它只涉及翻转。)

一个例外是NaN。 - ( - (NaN))是NaN,但NaN不等于任何值,甚至是另一个NaN。尽管如此,它仍然坚定地处于角落的情况下。

答案 1 :(得分:4)

您没有使用任何编程语言标记您的问题,因此根据IEEE 754标准,答案是肯定的,对于任何非NaN浮点值x,x = - ( - x)。

在一些执行不佳或指定不当的语言中,x可以计算为非NaN值,并使- (- x) == x计算为false。当允许编译器以额外的精度计算某些表达式时,会发生这种情况,并且从类型指示的精度减少到指定的精度(C#)或实现不当(如某些C编译器所发生的那样)。在这种情况下,右侧的x可能保持其精确值,而- (- x)则以类型的精度计算,最终结果是它们不同。