diff options
author | Ismael Juma <ismael@juma.me.uk> | 2011-12-03 00:24:13 +0000 |
---|---|---|
committer | Ismael Juma <ismael@juma.me.uk> | 2011-12-03 01:50:08 +0000 |
commit | 771f5ca5a11541866b57481ce0068fe8511c320d (patch) | |
tree | a1f1f5dfae400ac901b0d7fd21ba0b05320d2063 | |
parent | 2e14c128e725dfd8eb9ea3568f608c15a1d83658 (diff) | |
download | scala-771f5ca5a11541866b57481ce0068fe8511c320d.tar.gz scala-771f5ca5a11541866b57481ce0068fe8511c320d.tar.bz2 scala-771f5ca5a11541866b57481ce0068fe8511c320d.zip |
Delegate to Java's implementation of signum for Long and Int.
The Java implementation is faster as it doesn't have branches.
java.lang.Math includes implementations of signum for Double and Float,
but I didn't change the ones in scala.math because there is a difference
on how negative zero is handled.
-rw-r--r-- | src/library/scala/math/package.scala | 12 | ||||
-rw-r--r-- | test/files/jvm/signum.scala | 15 |
2 files changed, 18 insertions, 9 deletions
diff --git a/src/library/scala/math/package.scala b/src/library/scala/math/package.scala index 8948722340..0417461f85 100644 --- a/src/library/scala/math/package.scala +++ b/src/library/scala/math/package.scala @@ -127,15 +127,9 @@ package object math { else if (x > 0) 1.0f else x // NaN - def signum(x: Long): Long = - if (x == 0l) 0l - else if (x < 0) -1l - else 1l - - def signum(x: Int): Int = - if (x == 0) 0 - else if (x < 0) -1 - else 1 + def signum(x: Long): Long = java.lang.Long.signum(x) + + def signum(x: Int): Int = java.lang.Integer.signum(x) // ----------------------------------------------------------------------- // root functions diff --git a/test/files/jvm/signum.scala b/test/files/jvm/signum.scala new file mode 100644 index 0000000000..feb28d3e43 --- /dev/null +++ b/test/files/jvm/signum.scala @@ -0,0 +1,15 @@ +object Test { + def main(args: Array[String]) { + assert(math.signum(Long.MaxValue) == 1L) + assert(math.signum(1L) == 1L) + assert(math.signum(0L) == 0L) + assert(math.signum(-1L) == -1L) + assert(math.signum(Long.MinValue) == -1L) + + assert(math.signum(Int.MaxValue) == 1) + assert(math.signum(1) == 1) + assert(math.signum(0) == 0) + assert(math.signum(-1) == -1) + assert(math.signum(Int.MinValue) == -1) + } +} |