Apu*_*urv 2 language-agnostic math divide-by-zero
如果我运行以下代码行,我会收到DIVIDE BY ZERO错误
1. System.out.println(5/0);
Run Code Online (Sandbox Code Playgroud)
这是预期的行为.
现在我运行下面的代码行
2. System.out.println(5/0F);
Run Code Online (Sandbox Code Playgroud)
这里没有DIVIDE BY ZERO错误,而是显示INFINITY
在第一行中,我将两个整数和第二个两个实数分开.
为什么整数除以零会给出DIVIDE BY ZERO错误,而在给出实数的情况下INFINITY
我确信它不是特定于任何编程语言.
(编辑:问题已经改变了一点 - 它在某一点上特别提到了Java.)
Java中的整数类型不具有无穷大的表示,"不是一个数字"的价值观等等-而IEEE-754的浮点类型,如float和double做.这真的很简单.它不是真正的"真实"与"整数"差异 - 例如,也BigDecimal表示实数,但它也没有无穷大的表示.
编辑:要明确的是,这是特定于语言/平台的,因为您可以创建自己的语言/平台,其工作方式不同.但是,底层CPU通常以相同的方式工作 - 因此您会发现许多语言都以这种方式运行.
编辑:在动机方面,请记住,特别是对于无穷大的情况,有一些方法可以在不除零的情况下达到无穷大- 例如除以非常非常小的浮点数.在整数的情况下,零和一之间显然没有任何东西.
还要记住,使用整数(或十进制浮点类型)的情况通常不需要无穷大概念或"非数字"结果 - 而在科学应用中(其中float/ double通常更有用), "无穷大"(或至少,"一个太大而不能明显代表"的数字)仍然是一个潜在有效的结果.