在以下断言中,(对于符合要求的实现)哪些是保证的,哪些不是?
(请编辑此问题并使列表更加清晰,并且看起来很有用。)
答案 0 :(得分:5)
关于无穷大的算法确实遵循明确的规则,所以我将这个问题概括为包括无限的情况。我假设您使用=
表示IEEE浮点运算中的比较结果,因此NaN=NaN
为假。
a+b=b+a
如果输入都是有限数字,或者具有相同符号的无穷大,则为真。如果其中一个是NaN,或者它们是相反符号的无穷大,则为假,因为它们的总和将是NaN。
a*b=b*a
除非其中一个输入是NaN,或者它们是0且无穷大,否则为真。同样,这些案例使结果成为NaN。
a=-(-a)
除非a
是NaN,否则为真。
a-a=0
除非a
是NaN或无穷大,否则为真。
0*a=0
除非a
是NaN或无穷大,否则为真。
a-b=0 ==> a=b
是的。 a-b
等于某种东西,不包括输入为NaN,或者它们是等号的无穷大,a-b
将是NaN的情况。这是=
的解释很重要的情况。如果输入符号为零,则它们的差值也为零,并且它们在浮点算术规则下比较相等。
a=b ==> a-b=0
除非它们是无限的,否则为真。在这种情况下,他们比较相等,但他们的差异是NaN。 a=b
表示输入都不是NaN。
a=b ==> c+a=c+b
如果c
是NaN,或输入全部为无限且c
与a
和b
的符号相反,则为假。在所有其他情况下都是如此a=b
表示它们都不是NaN。
a>b ==> a-b>0
是的。 a>b
表示输入都不是NaN。
a-b>0 ==> a>b
是的。 a-b>0
表示输入都不是NaN。