IEEE浮点运算提供了哪些约束?

把友情*_*在无盐 2 floating-point standards ieee-754

在以下断言中,(对于符合要求的实现)哪些是保证的,哪些不是?

  1. a + b是有限的==> a + b = b + a
  2. a*b是有限的==> a*b = b*a
  3. a是有限的==> a = - ( - a)
  4. a是有限的==> aa = 0
  5. a是有限的==> 0*a = 0
  6. ab = 0 ==> a = b
  7. a = b ==> ab = 0
  8. a = b和c + a是有限的==> c + a = c + b
  9. a> b ==> ab> 0
  10. ab> 0 ==> a> b

(请编辑此问题并使列表覆盖更多并具有有机外观.)

Pat*_*han 5

关于无穷大的算法确实遵循明确的规则,所以我将这个问题概括为包括无限的情况.我假设您使用=的是IEEE浮点运算中的比较结果,因此NaN=NaN是错误的.

  1. a+b=b+a 如果输入都是有限数字,或者具有相同符号的无穷大,则为真.如果其中一个是NaN,或者它们是相反符号的无穷大,则为假,因为它们的总和将是NaN.

  2. a*b=b*a 除非其中一个输入是NaN,或者它们是0且无穷大,否则为真.同样,这些案例使结果成为NaN.

  3. a=-(-a)除非a是NaN,否则为真.

  4. a-a=0除非a是NaN或无穷大,否则为真.

  5. 0*a=0除非a是NaN或无穷大,否则为真.

  6. a-b=0 ==> a=b真正.a-b等于某种东西不包括输入是NaN或者它们是等号的无穷大,其中的情况a-b是NaN.这是一个解释=事情的案例.如果输入符号为零,则它们的差值也为零,并且它们在浮点算术规则下比较相等.

  7. a=b ==> a-b=0除非它们是相同的无穷大,否则为真.在这种情况下,他们比较相等,但他们的差异是NaN.a=b暗示输入都不是NaN.

  8. a=b ==> c+a=c+b假如果c是NaN,或输入是所有无限的,并且c具有从相反的符号ab.在所有其他情况下都是如此 a=b暗示它们都不是NaN.

  9. a>b ==> a-b>0真正.a>b暗示输入都不是NaN.

  10. a-b>0 ==> a>b真正.a-b>0暗示输入都不是NaN.