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