看起来不一致的是,在Scala中,整数运算div除零抛出a java.lang.ArithmeticException: / by zero,但浮点运算(1.0/0.0)返回Double.Infinity.
我理解从类型的角度来看,同时拥有Double.Infinity和Integer.Infinity可能很棘手,但我认为使用scala强大的类型系统他们可以想出一些其他方法来解决问题的这个方面.
还有其他我想念的东西可以更好地解释这两种不同的行为吗?
us2*_*012 15
这是硬件限制,不是软件之一,原因很简单:IEEE754浮点运算明确支持+Inf和-Inf,即有对应于这两种观念位表示,因此,它是有道理的,他们要的结果1.0/0.0.
在通用处理器中实现的整数算术没有无穷大的内部表示,因此必须抛出错误.
你可以实现一个支持软件无穷大的整数类型,但由于除法运算不能直接对应处理器的div指令,因此它会更慢.在我看来,这是不明智的:整数除零错误几乎总是由于(a)算法的错误实现或(b)无法正确验证用户输入,这两者都是必须解决的基本问题在编译代码之前,而不是在运行时通过异常!另一方面,在FP算术中,当你没有(并且实际上不能)期望它时,你可能很容易遇到被零:1e-308/1e+308具有正确的值,但double即使两个操作数都是,它也不能表示为.
| 归档时间: |
|
| 查看次数: |
1886 次 |
| 最近记录: |