2014-01-23 64 views
-2

我研究了IEEE從以下鏈接IEEE浮點數

IEEE floating Point Number

在上面的文章浮點數,我不是特別的操作背後的邏輯清晰。爲什麼他們決定以這種方式進行特殊操作(意味着爲什麼Infinity-Infinity是Nan)以及所有其他人。

如果有人知道,請幫助我。

回答

0

NaN就像「錯誤」或「未知」。每個操作NaN的結果爲NaN。引入了Infinity-Infinity來以明確定義的方式處理溢出。當溢出發生時,你無法確定它發生了多少。因此,兩個無限值可能實際上是不同的。因此Infinity - Infinity沒有任何明確定義的值,由NaN處理。

C例程:

#include <stdio.h> 
#include <float.h> 

int main() { 
    double e, f; 

    /* floats are always implicitly converted to doubles for computation */ 
    /* but intermediate values can be larger */ 
    e = DBL_MAX * 2.0; 
    f = DBL_MAX * 2.5; 
    printf("%-12s%e\n", "DBL_MAX", DBL_MAX); 
    printf("%-12s%e\n", "e",   e); 
    printf("%-12s%e\n", "f",   f); 
    printf("%-12s%e\n", "f - e",  f - e); 
    printf("%-12s%e\n", "f - e expr", DBL_MAX * 2.5 - DBL_MAX * 2.0); 

    return 0; 
} 

輸出(GCC 4.3.2,Linux的2.6.26-2-686):

 
DBL_MAX  1.79769e+308 
e   inf 
f   inf 
f - e  nan 
f - e expr 8.98847e+307 

最後一個表達式是一個棘手的。爲什麼會發生這種情況在別處有描述基本上中間計算是以更大的類型完成的。