c - 将 double 除以 0 的 double 给出表达式的极限而不是错误

标签 c math double

有人问我这段代码的结果:

#include <stdio.h>
int main()

{

    double a =0;

    double b =2/ a;

    printf("b=%f\n", b);

    printf("SLABC\n");

    return 0;

} 

运行它,代码打印出 b=infSLABC 然后正确存在。

我不明白为什么除以 2/0 不会出现错误(如果是 int a=0,我会得到相应的运行时错误),我唯一的假设是在 double 类型中,a=0 实际上并不意味着 a 为 0,而是 a 非常接近 0(显然,a>0 而不是否定的,或者它应该是-inf)。

即使 a=0.0a=0.00000000,我也会得到相同的结果。在我看来,计算机已经决定计算这个表达式的极限(微积分风格),但我想有一个更明智的解释。另外,我不清楚为什么它只是积极的,而不是消极的。

最佳答案

您看到的是正确的浮点除法。

值无穷大和负无穷大是有效的浮点值,也是“非数字”。

当除数为 0 时进行浮点除法,结果将为无穷大且符号与被除数匹配。

如果您要计算 0.0/0.0inf/inf,结果将为 NaN,即非数字。

关于c - 将 double 除以 0 的 double 给出表达式的极限而不是错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41899775/

相关文章:

c - 用C在内存中查找程序代码

c - 这是如何使用 scanf 接受多字字符串的?

java - android中的指数函数

java - 从 3D 空间中点的 vector 与轴及其长度所成的角度获取点的坐标

algorithm - 什么函数伪随机地重新排序 N 个项目?

c++ - 将 MIPS 代码移植到 x86_64 时的浮点差异

char *c = "12.3"我如何将 12.3 存储到 double 变量中

Ubuntu 13.10 中的 C 编译错误,可能是 makefile 中的错误

c - NULL 和 0 在 C 中是否完全等价?

python - Python 的 3d 数学库