2017-07-27 69 views
1

我想知道,在下列情況下,如果IEEE標準保證使用任何CPU秉承標準(不包括爲NaN和無窮大),每一種可能的情況:浮點IEEE保證

  • 交換性:X# Y = Y#X
  • 關聯性:(X#Y)#Z = X#(Y#Z)
  • X - X = 0(沒有X - X == 0.0F總是返回true?)
  • x * 0 = 0(是否x * 0.0f == 0.0f總是返回true?)
  • x * 1 = x(x * 1.0f == x總是返回true?)
  • x/x = 1.0f(x/x == 1.0f總是返回true嗎?除了對於x = 0當然)

(#裝置的所有操作:+ - * /)

+0

使用浮點數不能保證關聯性。 – nwellnhof

回答

6
  1. 交換性:+*保證除非任一參數是NaN-/不能交換,除以0.0會根據分子給出+Inf-InfNaN。這裏我沒有給予有符號的零的任何考慮。

  2. Associativity。絕對不。後面加上兩個小號碼是一個反例。

  3. x - x0除非xNaN+Inf,或-Inf在這種情況下它是NaN

  4. x * 00除非xNaN+Inf,或-Inf在這種情況下它是NaN

  5. x * 1x除非xNaN在這種情況下它是NaN

  6. x/x1除非x是0.0+Inf-Inf,或NaN在這種情況下它是NaN

請注意(5)的細微差別。

+0

如果您關心NaN符號和/或有效載荷,交換性會有點微妙:如果'x'和'y'都是NaN,具有不同的有效載荷,那麼'x + y'和'y + x'可能不完全相同。 「x + y」與「x」相同並且「y + x」與「y」相同並不罕見。 (標準沒有指定,但它只是說「結果應該是一個安靜的NaN,它應該是輸入的NaN之一」) –

+0

嗯。實際上,在我的macOS機器上,它看起來好像是'x + y',其中'x'和'y'是具有不同有效載荷的qNaN,返回_second_操作數'y'。 –

+0

(1)只是部分正確。 NaN不保證交換性。(我認爲處理器可能會像處理有符號零一樣處理NaN。) – Bathsheba