summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Gruntz <dominik.gruntz@fhnw.ch>2012-05-08 14:14:40 +0200
committerDominik Gruntz <dominik.gruntz@fhnw.ch>2012-05-08 14:14:40 +0200
commitc5d9e88b898dd73e8d60cfda89c6b9071657e2f3 (patch)
tree5a906eb14ef7dff57e44fe2a6a52797a2cf3797f
parent8e88e5b214ab365a268ab6bd6e53c4aa657ec5d0 (diff)
downloadscala-c5d9e88b898dd73e8d60cfda89c6b9071657e2f3.tar.gz
scala-c5d9e88b898dd73e8d60cfda89c6b9071657e2f3.tar.bz2
scala-c5d9e88b898dd73e8d60cfda89c6b9071657e2f3.zip
Changes scala.math.signum to return negative zeros.
-rw-r--r--src/library/scala/math/package.scala17
-rw-r--r--test/files/jvm/signum.scala6
2 files changed, 9 insertions, 14 deletions
diff --git a/src/library/scala/math/package.scala b/src/library/scala/math/package.scala
index 0417461f85..71a7f8e5ed 100644
--- a/src/library/scala/math/package.scala
+++ b/src/library/scala/math/package.scala
@@ -115,21 +115,10 @@ package object math {
def min(x: Float, y: Float): Float = java.lang.Math.min(x, y)
def min(x: Double, y: Double): Double = java.lang.Math.min(x, y)
- def signum(x: Double): Double =
- if (x == 0d) 0d
- else if (x < 0) -1.0
- else if (x > 0) 1.0
- else x // NaN
-
- def signum(x: Float): Float =
- if (x == 0f) 0f
- else if (x < 0) -1.0f
- else if (x > 0) 1.0f
- else x // NaN
-
- def signum(x: Long): Long = java.lang.Long.signum(x)
-
def signum(x: Int): Int = java.lang.Integer.signum(x)
+ def signum(x: Long): Long = java.lang.Long.signum(x)
+ def signum(x: Float): Float = java.lang.Math.signum(x)
+ def signum(x: Double): Double = java.lang.Math.signum(x)
// -----------------------------------------------------------------------
// root functions
diff --git a/test/files/jvm/signum.scala b/test/files/jvm/signum.scala
index feb28d3e43..76602a6641 100644
--- a/test/files/jvm/signum.scala
+++ b/test/files/jvm/signum.scala
@@ -11,5 +11,11 @@ object Test {
assert(math.signum(0) == 0)
assert(math.signum(-1) == -1)
assert(math.signum(Int.MinValue) == -1)
+
+ assert(java.lang.Float.floatToIntBits(math.signum(0f)) == 0x0)
+ assert(java.lang.Float.floatToIntBits(math.signum(-0f)) == 0x80000000)
+
+ assert(java.lang.Double.doubleToLongBits(math.signum(0d)) == 0x0L)
+ assert(java.lang.Double.doubleToLongBits(math.signum(-0d)) == 0x8000000000000000L)
}
}