2013-10-14 138 views
4

它已被asserted(即使佔字節序列性)IEEE754浮點不保證在平臺之間可交換。爲什麼IEEE-754浮點在平臺之間不可交換?

所以:

  • 爲什麼,從理論上說,是IEEE浮點平臺之間交換的?
  • 這些問題是否適用於現代硬件平臺(例如i686,x64,arm)?

如果問題是有效的,你可以請示範一個例子,在這種情況下(首選C或C++)?


動機:幾個GPSmanufacturers交換它們的二進制格式(例如)緯度,經度和在 「IEEE-754標準的浮點值」 原始數據。所以,我無法控制選擇文本格式或其他「便攜」格式。因此,我的問題在於何時可能發生或可能不會發生。

+1

鑑於許多變體FP實現,浮點是否存在交換問題? IEEE-754格外精確定義。 – chux

+4

我同意@chux在這裏,我認爲您誤解了您鏈接到的問題中的以下句子:「雙ieee754佈局在所有架構上都不是標準。」這並不意味着IEEE754有不同的表示形式,它僅僅意味着某些體系結構不使用IEEE754。 – us2012

+0

我猜對於NaN和/或低於正常值等有一些微妙之處。參見[Wikipedia](http://en.wikipedia.org/wiki/IEEE_floating_point#Interchange_formats):「與IEEE 754-1985一樣,信令NaN的編碼有一定的靈活性。」因此,這個問題。 – Damien

回答

5

IEEE 754第3.4條規定了二進制交換格式編碼。給定一個浮點格式(見下),交換格式將符號位放在最高有效位中,將指數位偏置在下一個最高有效位中,並將有效位編碼放在最低有效位中。從位到字節的映射未被指定,因此係統可以使用小端,大端或其他排序。

條款3.6規定了各種格式寬度的格式參數,包括64位二進制,其中有一個符號位,11個指數字段位和52個有效位字段位。該條款還指定了指數偏差。

第3.3條和第3.4條規定了用這種格式表示的數據。因此,爲了交換IEEE-754浮點數據,似乎系統只需要就兩件事達成一致:使用哪種格式(例如,64位二進制)以及如何來回比特(例如, ,如何將位映射到字節以寫入文件或網絡消息)。

+0

因此,基於3.6:*交換格式支持實現之間的浮點數據交換。*因此,「交換格式」是什麼存儲在內存中,因此我們通常將其稱爲「雙」?或者它是一個獨特的單獨表示? (例如,x87 FPU在內部是80位的,但是當檢索到一個值時,它是一個符合「交換格式」的64位值?) – Damien

+3

@Damien:該語言允許系統在內部使用不同的格式。例如,它可能會將顯式的前導位而不是隱式地存儲爲有效位,並且可能使用不同的位來標記NaN和無窮大。然而,我並不知道任何一個系統,其中正常存儲IEEE-754 64位二進制值到內存不會產生通常的交換格式。 Intel擴展格式不是IEEE-754 64位格式;它是一種自定義英特爾格式。以64位格式存儲的指令是類型之間的轉換,而不僅僅是格式更改。 –