-2
我研究了IEEE從以下鏈接IEEE浮點數
在上面的文章浮點數,我不是特別的操作背後的邏輯清晰。爲什麼他們決定以這種方式進行特殊操作(意味着爲什麼Infinity-Infinity是Nan)以及所有其他人。
如果有人知道,請幫助我。
我研究了IEEE從以下鏈接IEEE浮點數
在上面的文章浮點數,我不是特別的操作背後的邏輯清晰。爲什麼他們決定以這種方式進行特殊操作(意味着爲什麼Infinity-Infinity是Nan)以及所有其他人。
如果有人知道,請幫助我。
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
最後一個表達式是一個棘手的。爲什麼會發生這種情況在別處有描述基本上中間計算是以更大的類型完成的。