加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – scala:为什么1/0是算术异常但是1.0 / 0.0 = Double.Inf

发布时间:2020-12-15 00:03:51 所属栏目:Java 来源:网络整理
导读:看起来不一致的是,在 Scala中,整数算术除以零会抛出一个java.lang.ArithmeticException:/ by零,但浮点运算(1.0 / 0.0)会返回Double.Infinity. 我理解从类型的角度来看,同时拥有Double.Infinity和Integer.Infinity可能很棘手,但我认为使用scala强大的类型系
看起来不一致的是,在 Scala中,整数算术除以零会抛出一个java.lang.ArithmeticException:/ by零,但浮点运算(1.0 / 0.0)会返回Double.Infinity.

我理解从类型的角度来看,同时拥有Double.Infinity和Integer.Infinity可能很棘手,但我认为使用scala强大的类型系统他们可以想出一些其他方法来解决问题的这个方面.

还有其他我想念的东西可以更好地解释这两种不同的行为吗?

解决方法

这是一个硬件限制,而不是软件限制,原因很简单:IEEE754浮点算法明确支持Inf和-Inf,即有一些位表示与这两个想法相对应,因此它们是有意义的结果为1.0 / 0.0.

在通用处理器中实现的整数算术没有无穷大的内部表示,因此必须抛出错误.

你可以实现一个支持软件无穷大的整数类型,但由于除法运算不能直接对应处理器,它会慢一些的指令.在我看来,这是不明智的:整数除零错误几乎总是由于(a)算法的错误实现或(b)无法正确验证用户输入,这两者都是必须解决的基本问题在编译代码之前,而不是在运行时通过异常!另一方面,在FP算术中,当你没有(并且实际上不能)期望它时,你可能很容易遇到div:0:1e-308 / 1e 308具有正确的值,但它不能表示为double即使两个操作数都是.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读