gpt4 book ai didi

C IEEE-Floats inf 等于 inf

转载 作者:行者123 更新时间:2023-12-03 23:38:13 33 4
gpt4 key购买 nike

在 C 中,在使用 IEEE-754 float 的实现中,当我比较两个为 NaN 的 float 时,它返回 0 或“false”。但是为什么两个都为 inf 的 float 相等呢?

这个程序打印“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 比较谓词的细节:

Infinite operands of the same sign shall compare equal.

关于C IEEE-Floats inf 等于 inf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41834621/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com