代码之家  ›  专栏  ›  技术社区  ›  John Z. Li

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

  •  1
  • John Z. Li  · 技术社区  · 7 年前

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

    1. 如果x<y、 sqrt(x)<=sqrt(y)必须保持?
    2. 如果sqrt(x)<sqrt(y),x<=你必须坚持吗?

    设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必须保持。

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

    • 您知道任何保证1和2的sqrt()实现吗。
    • 给定将实数截断为浮点数的某种舍入规则,您知道任何保证3和4的sqrt()实现吗。
    1 回复  |  直到 7 年前
        1
  •  3
  •   Eric Postpischil    7 年前

    IEEE 754要求一致性实现提供平方根和从十进制转换为浮点的操作 正确四舍五入 :

    本标准的所有一致性实现应为所有支持的算术格式提供本条中列出的操作,以下规定除外。返回本标准规定的数值结果的每个计算操作,应首先生成一个精确到无限精度且范围无限的中间结果,然后四舍五入该中间结果(如有必要),以符合目的地格式

    最常用的舍入模式舍入到最接近的可表示值。在平局的情况下,它舍入到具有偶数低位的值。一种将平局从零舍入的变体。

    关于问题1,假设 x < y 但是 sqrt(x) &燃气轮机; sqrt(y) . 既然平方根是单调的,那么 sqrt(x) 必须更接近 y sqrt(y) 是或 sqrt(y) 必须更接近 x个 sqrt(x) 是所以这违反了取整规则。

    其他舍入规则在特定方向上舍入到最近的数字,即朝+无穷大、朝无穷大或朝零的方向之一。混乱的 sqrt 结果也将违反这些舍入规则。

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

    问题2是相同的。

    问题3具有相同的推理(应用两次: op 是弱单调的,并且 sqrt公司 是弱单调的)受限于 b 都是非负的(或量级很小 x个 [或 y ]零,即使 [或 b ]是负数,因为在转换过程中四舍五入)。否则,你可以 < b 但是 sqrt(x) <= sqrt(y) 不适用,因为 x个 是一个NaN,它不小于或等于任何值。

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