自定义绝对函数不适用于Scala中的大长值

时间:2016-11-16 17:57:10

标签: scala

我已经编写了自定义函数来获取长数的绝对值。

下面是

def absolute(x:Long):Long= x match {
 case y:Long if(y<0) => -1 * y
 case y if(y>=0) => y
}

println(absolute(-9223372036854775808L))
println(absolute(-2300L))

以下是上述程序的输出

-9223372036854775808
2300

我不确定为什么它适用于很长的值。关于同样的Ang建议。

2 个答案:

答案 0 :(得分:6)

这只是整数溢出的情况:

scala> Long.MaxValue
res0: Long = 9223372036854775807

scala> Long.MinValue
res1: Long = -9223372036854775808

因此,当你否定-9223372036854775808时,你将Long溢出1个单位,导致它环绕(对自己!)。

此处不需要匹配:

scala> def abs(x: Long): Long = if (x < 0) -x else x
abs: (x: Long)Long

答案 1 :(得分:1)

为什么不使用scala.math.abs? 见scala.math