Floating point IEEE浮点算法提供了哪些约束?

Floating point IEEE浮点算法提供了哪些约束?,floating-point,standards,ieee-754,Floating Point,Standards,Ieee 754,在以下断言(对于兼容实现)中,哪些断言是有保证的,哪些不是 a+b是有限的==>a+b=b+a a*b是有限的==>a*b=b*a a是有限的==>a=-a a是有限的==>a-a=0 a是有限的==>0*a=0 a-b=0==>a=b a=b==>a-b=0 a=b,c+a是有限的==>c+a=c+b a> b==>a-b>0 a-b>0==>a>b (请编辑此问题,使列表涵盖更多内容并具有有机的外观。)无穷大上的算术确实遵循明确的规则,因此我将此问题概括为包含无限大的情况。我假设您使用=表示

在以下断言(对于兼容实现)中,哪些断言是有保证的,哪些不是

  • a+b是有限的==>a+b=b+a
  • a*b是有限的==>a*b=b*a
  • a是有限的==>a=-a
  • a是有限的==>a-a=0
  • a是有限的==>0*a=0
  • a-b=0==>a=b
  • a=b==>a-b=0
  • a=b,c+a是有限的==>c+a=c+b
  • a> b==>a-b>0
  • a-b>0==>a>b

  • (请编辑此问题,使列表涵盖更多内容并具有有机的外观。)

    无穷大上的算术确实遵循明确的规则,因此我将此问题概括为包含无限大的情况。我假设您使用
    =
    表示IEEE浮点算法中的比较结果,因此
    NaN=NaN
    为false

  • a+b=b+a
    如果输入都是有限数或具有相同符号的无穷大,则为True。如果其中一个是NaN,或者它们是相反符号的无穷大,则为False,因为它们的和将是NaN

  • a*b=b*a
    除非其中一个输入为NaN,或输入为0和无穷大,否则为True。同样,这些案例使结果成为一个不确定因素

  • a=-a
    True,除非
    a
    是NaN

  • a-a=0
    为True,除非
    a
    为NaN或无穷大

  • 0*a=0
    为True,除非
    a
    为NaN或无穷大

  • a-b=0==>a=b
    True
    a-b
    等于某物时,排除输入为NaN或等号无穷大的情况,在这种情况下,
    a-b
    将为NaN。在这种情况下,
    =
    的解释很重要。如果输入是相反的符号零,它们的差值也是零,并且它们在浮点算术规则下比较相等

  • a=b==>a-b=0
    True,除非它们是相同的无穷大。在这种情况下,他们比较相等,但他们的差异是一个NaN
    a=b
    表示两个输入都不是NaN

  • a=b==>c+a=c+b
    如果
    c
    是一个NaN,或者输入都是无限的,并且
    c
    a
    b
    具有相反的符号,则
    a=b=/code>为False。在所有其他情况下都是如此
    a=b
    表示两者都不是NaN

  • a>b==>a-b>0
    True<代码>a>b
    表示两个输入都不是NaN

  • a-b>0==>a>b
    True<代码>a-b>0表示两个输入都不是NaN


  • “=”是指“位相同”(如果你想在C或C++编译器中应用这些转换,提供严格的IEEE-75绑定),或者你是指IEEE-74定义的“相等”谓词(例如,0和0比较为“相等”),一个NANN和其他任何比较不“相等”的谓词。?请编辑以回答@njuffa的问题?就目前而言,这个问题太模糊,无法回答。(例如,在7中,如果<代码> < < /代码>和<代码> b>代码>是按位相同的浮点,则以舍入负无穷舍入模式,<代码> A -B < /代码>将为负零。从该问题中不清楚是否认为“代码> A -B=0 < /COD>在这种情况下得到满足。”我想这里有用的问题不是每个
    ==>
    符号的RHS上的两个表达式在某种语言提供的比较操作中是否相等,而是它们在一段代码中是否可以互换。为此,你可能会认为任何两个NANS可以互相交换(很少有人真正关心NANG符号或有效载荷),但是你不想考虑<代码> 0 和<代码> -0 < /C> >是可互换的。