【发布时间】:2017-01-27 17:32:44
【问题描述】:
有人问我这段代码的结果:
#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 我得到相同的结果。对我来说感觉就像计算机已经决定计算这个表达式的极限(微积分风格),但我想有一个更明智的解释。另外,我不清楚为什么它只有积极的,而不是消极的。
【问题讨论】:
-
您可以检查除零标志。
-
它指的是
floating point和doubles的架构,如果你使用int而不是double你会看到错误 -
可能dupe?
-
float/double 值 0.0 表示该值太小,无法在此架构上表示(但实际上可能不为零!)。因此结果是如此之大,它既不能在这个架构上表示,也不能在这个架构上表示 +/-INF。 (聪明,现在我想到了这个。)
-
c++ division by 0的可能重复