有人问我这段代码的结果:
#include <stdio.h>
int main()
{
double a =0;
double b =2/ a;
printf("b=%f\n", b);
printf("SLABC\n");
return 0;
}
运行它,代码打印出 b=inf
和 SLABC
然后正确存在。
我不明白为什么除以 2/0 不会出现错误(如果是 int a=0
,我会得到相应的运行时错误),我唯一的假设是在 double 类型中,a=0 实际上并不意味着 a 为 0,而是 a 非常接近 0(显然,a>0 而不是否定的,或者它应该是-inf)。
即使 a=0.0
和 a=0.00000000
,我也会得到相同的结果。在我看来,计算机已经决定计算这个表达式的极限(微积分风格),但我想有一个更明智的解释。另外,我不清楚为什么它只是积极的,而不是消极的。
最佳答案
您看到的是正确的浮点除法。
值无穷大和负无穷大是有效的浮点值,也是“非数字”。
当除数为 0 时进行浮点除法,结果将为无穷大且符号与被除数匹配。
如果您要计算 0.0/0.0
或 inf/inf
,结果将为 NaN
,即非数字。
关于c - 将 double 除以 0 的 double 给出表达式的极限而不是错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41899775/