当前位置: 首页 > 面试题库 >

为什么用Java将数字除以零无穷大?

扈瑞
2023-03-14
问题内容

为什么下面的Java代码

System.out.println(new Integer(1)/ new Double(0));

打印’Infinity’且未定义。这在数学上不是错吗?


问题答案:

在数学中,有许多支持算术的不同结构。最突出的数字(例如自然数,整数和实数)不包括无穷大。在那些系统中,不支持除以零。

其他系统的确包含至少一个无穷大。参见,例如,真实的投影线。它确实允许被零除。

只有一种方法可以知道在特定系统中数学定义或未定义的内容-研究该系统。

类似地,操作是可交换的(a op b == b op a)和/或关联的(a op(b op c)==(a op b)op c)取决于系统和操作。

IEEE
754二进制浮点数是一个具有有限元素集的系统,其中包括两个无穷大。加法和乘法都是可交换的,而不是关联的。Java实数和双重算术均基于此。Java语言规范是唯一确定Java浮点算术中定义或未定义内容的唯一方法。

在使用浮点数时,许多最严重的错误都有其依据,即假定浮点数是实数,而不是有效但不同的系统。



 类似资料:
  • 为什么Java中的以下代码 打印“无穷大”而不是未定义。这在数学上不是错的吗?

  • 问题内容: 为什么这段代码没有抛出?看一看: 我不知道! 问题答案: 您为什么不能自己检查一下并抛出异常(如果您要的话)。

  • 我在做一个Android计算器,除以零得到9.223372e+18。为什么不显示NaN或Crash?我认为它的结果是9.223372e+18,因为这是可能的最大的double值,因为我使用了double数据类型除以零。既然这会让用户感到困惑,我该如何绕过这个问题呢? 嗨,伙计们,谢谢你们的回复。我很感激。我在下面发布了我的代码。

  • 最近我发现,如果你把一个双精度或浮点数除以0,你会得到无穷大作为值。我把无穷大转换成每种数据类型(通过编写、等),我发现如果你把它转换成字节或短,它会给出-1的值,但是如果你把它转换成任何其他数据类型,它会给你它的最大值。我想知道为什么会发生这种情况。有人猜到了吗? 这是我用来测试它的代码。 这是控制台给我的:

  • 为什么这段代码不抛出?看一看: 我不知道!

  • 下面的语句抛出。 因为文字被认为是一个文字,所以在整数算术中不允许除以零。 下面的语句无一例外地生成(不是数字)。 在这种情况下,两个操作数都被认为是double的。 同样,下面的语句也不会抛出任何异常。 它们会产生以下输出。 它们都返回为什么浮点或双精度数字允许此操作(除以零)? 顺便说一句,我可以理解浮点数(双精度数)的值代表正无穷大,负无穷大,而不是一个数字()……