目前,我發送一個非正規化的浮點數= 0x00300000。在爲其他變量設置此值之前,會進行不等式(var!= var)檢查,即檢查NaN。非規格化數字的不等式檢查失敗,該數字被檢測爲NaN。非正規化的浮點數被檢測爲NaN。爲什麼?
你能告訴我我在做什麼錯嗎?我的代碼在C.
謝謝。
目前,我發送一個非正規化的浮點數= 0x00300000。在爲其他變量設置此值之前,會進行不等式(var!= var)檢查,即檢查NaN。非規格化數字的不等式檢查失敗,該數字被檢測爲NaN。非正規化的浮點數被檢測爲NaN。爲什麼?
你能告訴我我在做什麼錯嗎?我的代碼在C.
謝謝。
的平等檢查,似乎我的系統上罰款:
#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
同樣在這裏。另外,如果我爲i使用值'0xFFFFFFFF',則按預期打印值NAN和「不等於」。所以我的猜測是,問題中的價值沒有OP預期的價值。 – 2012-02-28 08:19:10
我想它必須對編譯器選項或設置做些什麼。 – kp11 2012-02-28 10:03:47
我不知道我喜歡「非正規化浮點數= 0x00300000」 ...你_絕對確保浮點變量具有該位模式的值?如果你打印它會發生什麼? – 2012-02-28 07:57:13
向我們顯示您的代碼。 C代碼中通常不會看到(var!= var)評估和NaN。 Javascript是的,但我很困惑你在做什麼,所以向我們展示你的代碼。 – selbie 2012-02-28 07:57:34
你能給我一個十六進制的非規範化數字嗎?我會嘗試相同的,看看發生了什麼,以防我沒有有效的非規範化數字。 @Mysticial:它與我顯示的數字相同,但未通過不平等檢查。它與編譯器設置有關嗎? – kp11 2012-02-28 08:03:15