在 C 中,在使用 IEEE-754 浮点数的实现中,当我比较两个 NaN 浮点数时,它返回 0 或“false”。但是为什么两个都为 inf 的浮点数会被视为相等呢?
该程序打印“equal: ...”(至少在带有 gcc 的 Linux AMD64 下),在我看来它应该打印“ different: ...”。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
volatile double a = 1e200; //use volatile to suppress compiler warnings
volatile double b = 3e200;
volatile double c = 1e200;
double resA = a * c; //resA and resB should by inf
double resB = b * c;
if (resA == resB)
{
printf("equal: %e * %e = %e = %e = %e * %e\n",a,c,resA,resB,b,c);
}
else
{
printf("different: %e * %e = %e != %e = %e * %e\n", a, c, resA, resB, b, c);
}
return EXIT_SUCCESS;
}
另一个例子,为什么我认为inf和inf不一样,是:自然数和有理数的个数都是无限的,但又不相同。
那么为什么inf==inf呢?
无穷大比较相等,因为标准就是这么说的。来自部分5.11 比较谓词的详细信息:
无限个相同符号的操作数应进行比较equal.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)