浮点 sqrt() 函数是否保证顺序关系

Joh*_* Li 2 floating-point precision floating-accuracy

给定两个浮点数 x 和 y,假设所有浮点运算都符合 IEEE754 标准,以及平方根函数 sqrt() 的某种实现,

  1. 如果 x < y,sqrt(x) <= sqrt(y) 是否一定成立?
  2. 如果 sqrt(x) < sqrt(y),那么 x <= y 是否一定成立?

设 a、b 是两个(精确)实数,并且 x = op(a)、y = op(b),其中 op() 表示将实数舍入为其浮点表示形式。那么下面的问题:(*表示浮点乘法)

  1. 如果 a< b,则 sqrt(x) <= sqrt(y) 是否一定成立?
  2. 如果 sqrt(x)*sqrt(x) < sqrt(y)*sqrt(y),则 a <= b 必须成立。

如果对于上述部分或全部问题,答案是否定的,那么

  • 你知道 sqrt() 的任何实现可以保证 1 和 2 吗?
  • 给定将实数截断为浮点数的特定舍入规则,您知道 sqrt() 的任何实现可以保证 3 和 4 吗?

Eri*_*hil 5

IEEE 754 要求符合要求的实现提供平方根和从十进制转换为正确舍入的浮点数的运算:

\n\n
\n

除下述情况外,所有符合本标准的实现都应为所有支持的算术格式提供本节中列出的操作。返回本标准指定的数字结果的每个计算操作都应执行,就像它首先生成一个精确到无限精度且具有无界范围的中间结果一样,然后在必要时对该中间结果进行舍入以适合目标\ xe2\x80\x99s 格式\xe2\x80\xa6

\n
\n\n

最常用的舍入模式舍入到最接近的可表示值。如果出现平局,则四舍五入到偶数低位的值。该舍入的一个变体远离零。

\n\n

关于问题1 ,假设x<but> 。由于平方根是单调的,因此要么必须更接近于 的数学平方根,要么必须更接近于的数学平方根。所以这会违反舍入规则。ysqrt(x)sqrt(y)sqrt(x)ysqrt(y)sqrt(y)xsqrt(x)

\n\n

其他舍入规则在特定方向上舍入到最接近的数字,其中之一是朝向 +无穷大、朝向 \xe2\x88\x92infinity 或朝向零。无序的sqrt结果也会违反这些舍入规则。

\n\n

请注意,许多平台会声称使用 IEEE 754 格式,但这并不意味着它们符合 IEEE 754 运算规则,包括平方根和从十进制到浮点的转换。

\n\n

问题2是相同的。

\n\n

问题 3 具有相同的推理(应用两次:op是弱单调的,并且sqrt是弱单调的),但条件是ab是非负的(或者即使a [or b ]的量值很小,x[or ]为零)为负数,因为转换过程中进行舍入)。否则,您可能有a < b,但不成立,因为是 NaN,它不小于或等于任何值。ysqrt(x) <= sqrt(y)x

\n\n

问题 4 成立,现在应用了 3 次弱单调性。

\n

  • @JohnZ.Li:这就像问汽车的运动是由汽车、传动系统还是发动机提供的。一切都必须共同努力才能产生结果。现代通用处理器内置了浮点的基本算术,然后由编译器和软件库来正确使用它并添加对附加功能的支持,例如从十进制浮点到二进制浮点的转换和` sqrt` 如果硬件不提供它。即使硬件符合 IEEE 754,某些编译器也不符合 IEEE 754。 (2认同)