gpt4 book ai didi

floating-point - 浮点比较是连续的吗?如果 !(a <= b) 是 (b > a) 保证?

转载 作者:行者123 更新时间:2023-12-02 06:32:58 25 4
gpt4 key购买 nike

是否保证浮点:

  • (a <= b)暗示!(b > a)
  • !(a <= b)暗示b > a

我目前正在处理跨语言问题,但您可以假设一个 floatdouble如有必要,使用 C、C++ 或 C# 之一。假设没有 NaN参与其中。

我假设 IEEE 的规则适用于此。我不确定他们的订购规则是否暗示了上述内容。

我特别担心的是 ab并不总是相同的变量,但将是相同的值。它们总是来自完全相同的计算。但是,由于比较是在不同的代码位置进行的,所以我无法保证它们是否始终是存储/截断的形式(最终可能会以更高的精度结束)。

当我在寻找保证时,答案应该包括做出这些保证的引用,或者官方/强烈暗示保证。

最佳答案

根据 IEEE 754 (2008) 标准 (§ 5.11):

Four mutually exclusive relations are possible: less than, equal, greater than, and unordered. The last case arises when at least one operand is NaN. Every NaN shall compare unordered with everything, including itself. Comparisons shall ignore the sign of zero (so +0 = −0). Infinite operands of the same sign shall compare equal.

是的,假设两个参数都不是 NaN,那么这两个陈述都是正确的。

至于隐式扩展精度格式的使用,问题是允许这些意味着它不再严格遵循 IEEE 754 标准。请参阅 this excellent answer and discussion,了解如何启用严格合规性。

更新:据我了解,如果您使用的是最近的标准(例如 -std=c99 ),那么您不必担心中间精度,只要您要比较的东西是声明的变量(例如 double a = 0.1; if (a < b) ... )并且不是常量(例如 if (0.1 < b) ... )。

关于floating-point - 浮点比较是连续的吗?如果 !(a <= b) 是 (b > a) 保证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28849392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com