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

时间:2018-02-14 08:08:04

标签: floating-point precision floating-accuracy

给出两个浮点数x和y,假设所有浮点运算符合IEEE754标准,并且某个实现平方根函数sq​​rt(),

  1. 如果x< y,sqrt(x)< = sqrt(y)必须保持?
  2. if sqrt(x)< sqrt(y),x< = y必须持有吗?
  3. 设a,b是两个(精确的)实数,并且x = op(a),y = op(b),其中op()表示将实数四舍五入到其浮点表示。然后是以下问题:(*表示浮点乘法)

    1. 如果a< b,sqrt(x)< = sqrt(y)必须保持吗?
    2. if sqrt(x)* sqrt(x)< sqrt(y)* sqrt(y),< = b必须保持。
    3. 如果对上述部分或全部内容,答案为否,则

      • 您是否知道任何保证1和2的sqrt()实现。
      • 鉴于某个将实数截断为浮点数的舍入规则,您是否知道任何保证3和4的sqrt()实现。

1 个答案:

答案 0 :(得分:3)

IEEE 754要求符合规范的实现提供平方根和操作,以便从正确舍入的十进制转换为浮点数:

  

除下述规定外,本标准的所有符合要求的实施应为所有支持的算术格式提供本节中列出的操作。返回由此标准指定的数值结果的每个计算操作都应该执行,就好像它首先产生一个正确到无限精度和无界范围的中间结果,然后根据需要舍入该中间结果以适合目标的格式...

舍入模式最常用于舍入到最接近的可表示值。在平局的情况下,它使用偶数低位舍入到该值。该轮的一个变种与零相关。

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

其他舍入规则在特定方向上舍入到最接近的数字,朝向+无穷大,朝向-infinity或朝向零。无效的sqrt(x)结果也会违反这些舍入规则。

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

问题2是相同的。

问题3保持相同的推理(应用两次:sqrt弱单调,op弱单调)受 a b的限制是非负数(或者数量很小,sqrt [或x]为零,即使 a [或 b 由于转换过程中的舍入,因此是负数)。否则,您可以 a &lt; b ,但y不成立,因为sqrt(x) <= sqrt(y)是NaN,不小于或等于任何东西。

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