2012-02-28 22 views
0

目前,我發送一個非正規化的浮點數= 0x00300000。在爲其他變量設置此值之前,會進行不等式(var!= var)檢查,即檢查NaN。非規格化數字的不等式檢查失敗,該數字被檢測爲NaN。非正規化的浮點數被檢測爲NaN。爲什麼?

你能告訴我我在做什麼錯嗎?我的代碼在C.

謝謝。

+0

我不知道我喜歡「非正規化浮點數= 0x00300000」 ...你_絕對確保浮點變量具有該位模式的值?如果你打印它會發生什麼? – 2012-02-28 07:57:13

+0

向我們顯示您的代碼。 C代碼中通常不會看到(var!= var)評估和NaN。 Javascript是的,但我很困惑你在做什麼,所以向我們展示你的代碼。 – selbie 2012-02-28 07:57:34

+0

你能給我一個十六進制的非規範化數字嗎?我會嘗試相同的,看看發生了什麼,以防我沒有有效的非規範化數字。 @Mysticial:它與我顯示的數字相同,但未通過不平等檢查。它與編譯器設置有關嗎? – kp11 2012-02-28 08:03:15

回答

2

的平等檢查,似乎我的系統上罰款:

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    int i = 0x00300000; 
    float f = 0; 
    if (sizeof(f) != sizeof(i)) { 
     printf ("Urk!\n"); 
     return 1; 
    } 
    memcpy (&f, &i, sizeof(f)); 
    printf ("%.50f\n", f); 
    if (f == f) 
     puts ("Equal"); 
    else 
     puts ("Not equal"); 
    return 0; 
} 

此輸出:

0.00000000000000000000000000000000000000440810381558 
Equal 
+1

同樣在這裏。另外,如果我爲i使用值'0xFFFFFFFF',則按預期打印值NAN和「不等於」。所以我的猜測是,問題中的價值沒有OP預期的價值。 – 2012-02-28 08:19:10

+0

我想它必須對編譯器選項或設置做些什麼。 – kp11 2012-02-28 10:03:47

相關問題