2014-01-23 63 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 

最后一个表达式是一个棘手的。为什么会发生这种情况在别处有描述基本上中间计算是以更大的类型完成的。