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

Floating point 浮点sqrt()函数是否保证顺序关系,floating-point,precision,floating-accuracy,Floating Point,Precision,Floating Accuracy,给定两个浮点数x和y,假设所有浮点数运算都符合IEEE754标准,并且平方根函数sqrt()的特定实现 如果x

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


  • 如果x 本标准的所有一致性实施应提供本条中列出的所有支持算术格式的操作,以下规定除外。返回本标准规定数值结果的每个计算操作应首先产生一个中间结果,该中间结果的精度和范围应无限精确,然后根据需要对该中间结果进行四舍五入,以符合目的地的格式

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

    关于问题1,假设
    x
    y
    但是
    sqrt(x)
    sqrt(y)
    。由于平方根是单调的,那么
    sqrt(x)
    必须比
    sqrt(y)
    更接近
    y的数学平方根,或者
    sqrt(y)
    必须比
    sqrt(x)
    更接近
    x的数学平方根。因此,这将违反舍入规则

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

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

    问题2是相同的


    问题3具有相同的推理(应用两次:
    op
    是弱单调的,
    sqrt
    是弱单调的),但前提条件是a和b是非负的(或者由于转换过程中的舍入,其大小非常小,以至于
    x
    [或
    y
    ]为零,即使a[或b]为负)。否则,您可能有asqrt(x)(1)将很难实现
    sqrt
    是一种将整个浮点范围压缩到该范围一半左右的操作,因此在某些情况下,最终必然会出现
    x!=y
    但是
    sqrt(x)=sqrt(y)
    @MarkDickinson它不仅与范围有关,而且与分辨率有关。当一个浮点数减少x到sqrt(x)时,分辨率会更高。我想你没有抓住我的重点。设我们是所有非负有限浮点数的(有限!)集。然后sqrt从S映射到S的严格子集。根据鸽子洞原理,这保证了碰撞。所以你的财产(1)是不可能实现的。出于同样的原因,(5)是不可能的。所以最后两个问题是多余的:不可能有满足(1)、(2)、(3)和(4)的sqrt实现(因为这样的实现已经不能满足(1))。同样,没有满足(5)、(6)、(7)和(8)要求的实现。@MarkDickinson fair point。@MarkDickinson非常感谢您帮助澄清问题。我更新了这个问题以更好地反映我的意图,即sqrt()操作可能的保序性。非常清楚的说明,非常感谢。对于符合IEEE 754标准的操作,它们是在CUP级别支持的,还是在编译器级别支持的,还是作为单独的库实现的?@JohnZ.Li:这就像询问汽车的运动是由汽车、传动系还是发动机提供的。一切都必须共同努力才能产生结果。现代的通用处理器内置了浮点运算的基本算法,如果硬件不提供,则需要编译器和软件库来正确使用它,并添加对附加功能的支持,例如从十进制到二进制浮点的转换和
    sqrt
    。某些编译器不符合IEEE 754,即使硬件符合。