NaN可能有許多不同的二進制表示形式,它們通常可用於提供更多關於導致NaN的信息。任何格式爲x111 1111 1xxx xxxx xxxx xxxx xxxx xxxx
的IEEE 32位浮點數都是NaN。此外,2個NaN(可能不同的二進制值)之間的任何比較評估爲false。將float與一個特定的NAN值進行比較的最正確方法是什麼?
所以給出了兩個浮筒:
float a = NaN1;
float b = NaN2;
兩者都是NaN的,但可能有不同的值高於x
位,什麼是比較它們的二進制內容最正確的方式(即檢查它們是相同的類型 NaN)?
對我來說最明顯的方法是執行c樣式類型轉換,如:*(uint32_t*)&a == *(uint32_t*)&b
但是,浮點的大小不保證是32位。
浮點到整數轉換:http://stackoverflow.com/questions/2544394/c-浮動點 - 整數 - 轉換 - 轉換 – 9dan 2014-10-01 07:56:41
什麼非32位大小浮動,支持NaNs,你期望遭遇?我認爲您在實踐中不太可能遇到任何支持NaN的非IEEE 754格式。我認爲'float'可能是64位IEEE 754雙精度類型,儘管這可能有點不正確。 – 2014-10-01 08:20:25
@MarkDickinson這是嵌入式應用程序的代碼。我的主要目標是Raspberry Pi,但我的目標是用c編譯器支持任何半功能微控制器。我會毫不驚訝地遇到一個16位半精度浮點型。我無法想象這樣一種體系結構,其默認浮點數在未來十年內不會是16,32或64位,但我更願意在實際中避免不必要的限制。 – Ponkadoodle 2014-10-01 08:34:00