Floating point 浮点比较是连续的吗?如果!(a<;=b)有(b>;a)担保吗?

Floating point 浮点比较是连续的吗?如果!(a<;=b)有(b>;a)担保吗?,floating-point,ieee-754,Floating Point,Ieee 754,是否保证浮点值满足以下条件: (a) !(a 我现在正在处理跨语言,但是如果C语言,C,C++,或C中的一个,你可以假设浮点或双。假设没有楠< /C> >。 我假设IEEE的规则适用于这里。我不确定他们的排序规则是否暗示了上述内容 我特别关心的是a和b并不总是相同的变量,而是相同的值。它们总是由完全相同的计算结果得出。但是,由于比较是在不同的代码位置进行的,我无法保证它们是否总是存储/截断的表单(最终可能会达到更高的精度) 当我在寻找担保时,答案应包括做出这些担保的参考,或官方/强烈暗示担保

是否保证浮点值满足以下条件:

  • (a)
  • !(a

我现在正在处理跨语言,但是如果C语言,C,C++,或C中的一个,你可以假设<代码>浮点或<代码>双。假设没有<代码>楠< /C> >。 我假设IEEE的规则适用于这里。我不确定他们的排序规则是否暗示了上述内容

我特别关心的是
a
b
并不总是相同的变量,而是相同的值。它们总是由完全相同的计算结果得出。但是,由于比较是在不同的代码位置进行的,我无法保证它们是否总是存储/截断的表单(最终可能会达到更高的精度)

当我在寻找担保时,答案应包括做出这些担保的参考,或官方/强烈暗示担保。

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

可能存在四种互斥关系:小于、等于、大于和无序。最后一种情况发生在至少一个操作数为NaN时。每个NaN都应将无序与包括自身在内的所有对象进行比较。比较应忽略零的符号(so+0=−0)。相同符号的无限个操作数的比较应相等

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

至于隐式扩展精度格式的使用,问题是允许这些格式意味着它不再严格遵循IEEE 754标准。请参阅启用严格遵从性


更新:据我所知,如果您使用的是最新标准(例如
-std=c99
),那么您不必担心中间精度,只要您比较的是声明的变量(例如
双a=0.1;if(a
)而不是常量(例如
if(0.1
).

答案是,但这只是因为根据我对IEEE-754标准的理解,您排除了NAN。通常答案是。该标准的相关部分如下所示:

5.11比较谓词的详细信息 对于每种支持的算术格式,应能够进行比较 以该格式将一个浮点基准转换为另一个浮点基准(见5.6.1)。 此外,浮点数据以不同的格式表示 只要操作数的格式相同,则应具有可比性 基数

四种相互排斥的关系是可能的:小于、等于、, 大于,且无序。当至少一个操作数为NaN时,会出现最后一种情况。每个NaN都应与无序进行比较 一切,包括它本身。比较应该忽略 零(so+0=−0)。应比较相同符号的无限个操作数 平等

语言定义了比较结果的传递方式,以 两种方式中的一种:作为一种关系标识四种方式中的一种 上面列出的关系,或作为对谓词的真假响应 它指定了所需的特定比较

表5.1、表5.2和表5.3展示了22项功能 不同的有用谓词和否定,具有不同的特殊和 传统名称和符号。如果每个谓词的任何一个 指示的关系为真。关系“”表示无序 表5.2列出了五个无序的信令谓词和 当 关系无序。该无效操作异常将进行保护 防止使用 标准谓词{}及其否定,不带 考虑一个安静的NaN操作数的可能性 显式地考虑到操作数可能会发生异常的可能性 使用表5.3中不发出信号的无序安静谓词 这样一个无效的操作异常

除了无效操作外,比较从不发出异常信号 例外

注意,谓词成对出现,每个谓词都是 其他;应用前缀,例如不否定表中的谓词 表5.1、表5.2和表5.3颠倒了其关联项的真/假含义,但不改变无序关系 导致无效的操作异常

表5.1中无序的静默谓词并不表示异常 在安静的NaN操作数上:

表5.1-所需无序安静谓词和否定

表5.2中的无序信令谓词,用于 程序编写时没有考虑到NaN的可能性 操作数,在安静的NaN操作数上发出无效操作异常信号:

表5.2-所需无序信令谓词和否定

表5.3中的无序安静谓词,用于 为考虑NaN操作数的可能性而编写的程序, 不要在安静的NaN操作数上发出异常信号:

表5.3-所需无序安静谓词和否定

有两种方法可以写出谓词的逻辑否定,一种是 使用NOT显式和另一个反转关系运算符。 因此,在编写程序时不考虑NaN的可能性 操作数,无序信号谓词(X)的逻辑求反 =Y)的不同之处在于 当X和Y为空时,不发出无效操作异常信号 无序(除非X或Y是一个信号NaN)。相反,(X=Y)的逻辑否定可能写为NOT(X=Y)或NOT(X=Y) (X?Y);在这种情况下,两个表达式在功能上是等效的 到(X≠Y)

因此,对我来说,由于没有NAN,所以排除了
UN
关系,因此剩下的是set
EQ LT GT