From 1db89021e52efd946054c98add2f855d050453c4 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Sat, 12 Dec 2009 15:13:22 +0000 Subject: Took advantage of package object fix to factor ... Took advantage of package object fix to factor the duplicated code out of scala.Math and scala.math.`package`. This required a new starr which exposes inherited package object members (starr is based on r20110.) --- src/library/scala/Math.scala | 139 +-------------------------------- src/library/scala/MathCommon.scala | 144 +++++++++++++++++++++++++++++++++++ src/library/scala/math/package.scala | 130 +------------------------------ 3 files changed, 148 insertions(+), 265 deletions(-) create mode 100644 src/library/scala/MathCommon.scala (limited to 'src/library') diff --git a/src/library/scala/Math.scala b/src/library/scala/Math.scala index 6a9fcc029a..3c11958053 100644 --- a/src/library/scala/Math.scala +++ b/src/library/scala/Math.scala @@ -15,7 +15,7 @@ package scala * trigonometric functions. */ @deprecated("use scala.math package instead") -object Math { +object Math extends MathCommon { @deprecated("Use scala.Byte.MinValue instead") val MIN_BYTE = java.lang.Byte.MIN_VALUE @@ -93,139 +93,4 @@ object Math { /** Positive infinity of type scala.Double. */ @deprecated("Use scala.Double.PositiveInfinity instead") val POS_INF_DOUBLE = java.lang.Double.POSITIVE_INFINITY - - /** The code from here down is cut/pasted from the math package object. - * It should properly be in a shared trait but as of this writing - * inherited members in package objects are not visible. - */ - - /*******************************************************************/ - - /** The double value that is closer than any other to - * e, the base of the natural logarithms. - */ - val E = java.lang.Math.E - - /** The double value that is closer than any other to - * pi, the ratio of the circumference of a circle to its - * diameter. - */ - val Pi = java.lang.Math.PI - - /** Returns a double value with a positive sign, greater than - * or equal to 0.0 and less than 1.0. - */ - def random: Double = java.lang.Math.random() - - def sin(x: Double): Double = java.lang.Math.sin(x) - def cos(x: Double): Double = java.lang.Math.cos(x) - def tan(x: Double): Double = java.lang.Math.tan(x) - def asin(x: Double): Double = java.lang.Math.asin(x) - def acos(x: Double): Double = java.lang.Math.acos(x) - def atan(x: Double): Double = java.lang.Math.atan(x) - - /** Converts an angle measured in degrees to an approximately equivalent - * angle measured in radians. - * - * @param x an angle, in degrees - * @return the measurement of the angle x in radians. - */ - def toRadians(x: Double): Double = java.lang.Math.toRadians(x) - - /** Converts an angle measured in radians to an approximately equivalent - * angle measured in degrees. - * - * @param x angle, in radians - * @return the measurement of the angle x in degrees. - */ - def toDegrees(x: Double): Double = java.lang.Math.toDegrees(x) - - /** Returns Euler's number e raised to the power of a - * double value. - * - * @param x the exponent to raise e to. - * @return the value ea, where e - * is the base of the natural logarithms. - */ - def exp(x: Double): Double = java.lang.Math.exp(x) - def log(x: Double): Double = java.lang.Math.log(x) - def sqrt(x: Double): Double = java.lang.Math.sqrt(x) - def IEEEremainder(x: Double, y: Double): Double = java.lang.Math.IEEEremainder(x, y) - - def ceil(x: Double): Double = java.lang.Math.ceil(x) - def floor(x: Double): Double = java.lang.Math.floor(x) - - /** Returns the double value that is closest in value to the - * argument and is equal to a mathematical integer. - * - * @param x a double value - * @return the closest floating-point value to a that is equal to a - * mathematical integer. - */ - def rint(x: Double): Double = java.lang.Math.rint(x) - - /** Converts rectangular coordinates (x, y) to polar - * (r, theta). - * - * @param x the ordinate coordinate - * @param y the abscissa coordinate - * @return the theta component of the point (r, theta) - * in polar coordinates that corresponds to the point - * (x, y) in Cartesian coordinates. - */ - def atan2(y: Double, x: Double): Double = java.lang.Math.atan2(y, x) - - /** Returns the value of the first argument raised to the power of the - * second argument. - * - * @param x the base. - * @param y the exponent. - * @return the value xy. - */ - def pow(x: Double, y: Double): Double = java.lang.Math.pow(x, y) - - /** Returns the closest long to the argument. - * - * @param x a floating-point value to be rounded to a long. - * @return the value of the argument rounded to the nearest - * long value. - */ - def round(x: Float): Int = java.lang.Math.round(x) - def round(x: Double): Long = java.lang.Math.round(x) - def abs(x: Int): Int = java.lang.Math.abs(x) - def abs(x: Long): Long = java.lang.Math.abs(x) - def abs(x: Float): Float = java.lang.Math.abs(x) - def abs(x: Double): Double = java.lang.Math.abs(x) - - def max(x: Int, y: Int): Int = java.lang.Math.max(x, y) - def max(x: Long, y: Long): Long = java.lang.Math.max(x, y) - def max(x: Float, y: Float): Float = java.lang.Math.max(x, y) - def max(x: Double, y: Double): Double = java.lang.Math.max(x, y) - - def min(x: Int, y: Int): Int = java.lang.Math.min(x, y) - def min(x: Long, y: Long): Long = java.lang.Math.min(x, y) - 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 = - 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 -} +} \ No newline at end of file diff --git a/src/library/scala/MathCommon.scala b/src/library/scala/MathCommon.scala new file mode 100644 index 0000000000..480f7e1913 --- /dev/null +++ b/src/library/scala/MathCommon.scala @@ -0,0 +1,144 @@ +/* __ *\ +** ________ ___ / / ___ Scala API ** +** / __/ __// _ | / / / _ | (c) 2002-2010, LAMP/EPFL ** +** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** +** /____/\___/_/ |_/____/_/ | | ** +** |/ ** +\* */ + +// $Id$ + +package scala + +/** Common code between the deprecated scala.Math object and + * the scala.math package object. + */ +private[scala] trait MathCommon { + /** The double value that is closer than any other to + * e, the base of the natural logarithms. + */ + val E = java.lang.Math.E + + /** The double value that is closer than any other to + * pi, the ratio of the circumference of a circle to its + * diameter. + */ + val Pi = java.lang.Math.PI + + /** Returns a double value with a positive sign, greater than + * or equal to 0.0 and less than 1.0. + */ + def random: Double = java.lang.Math.random() + + def sin(x: Double): Double = java.lang.Math.sin(x) + def cos(x: Double): Double = java.lang.Math.cos(x) + def tan(x: Double): Double = java.lang.Math.tan(x) + def asin(x: Double): Double = java.lang.Math.asin(x) + def acos(x: Double): Double = java.lang.Math.acos(x) + def atan(x: Double): Double = java.lang.Math.atan(x) + + /** Converts an angle measured in degrees to an approximately equivalent + * angle measured in radians. + * + * @param x an angle, in degrees + * @return the measurement of the angle x in radians. + */ + def toRadians(x: Double): Double = java.lang.Math.toRadians(x) + + /** Converts an angle measured in radians to an approximately equivalent + * angle measured in degrees. + * + * @param x angle, in radians + * @return the measurement of the angle x in degrees. + */ + def toDegrees(x: Double): Double = java.lang.Math.toDegrees(x) + + /** Returns Euler's number e raised to the power of a + * double value. + * + * @param x the exponent to raise e to. + * @return the value ea, where e + * is the base of the natural logarithms. + */ + def exp(x: Double): Double = java.lang.Math.exp(x) + def log(x: Double): Double = java.lang.Math.log(x) + def sqrt(x: Double): Double = java.lang.Math.sqrt(x) + def IEEEremainder(x: Double, y: Double): Double = java.lang.Math.IEEEremainder(x, y) + + def ceil(x: Double): Double = java.lang.Math.ceil(x) + def floor(x: Double): Double = java.lang.Math.floor(x) + + /** Returns the double value that is closest in value to the + * argument and is equal to a mathematical integer. + * + * @param x a double value + * @return the closest floating-point value to a that is equal to a + * mathematical integer. + */ + def rint(x: Double): Double = java.lang.Math.rint(x) + + /** Converts rectangular coordinates (x, y) to polar + * (r, theta). + * + * @param x the ordinate coordinate + * @param y the abscissa coordinate + * @return the theta component of the point (r, theta) + * in polar coordinates that corresponds to the point + * (x, y) in Cartesian coordinates. + */ + def atan2(y: Double, x: Double): Double = java.lang.Math.atan2(y, x) + + /** Returns the value of the first argument raised to the power of the + * second argument. + * + * @param x the base. + * @param y the exponent. + * @return the value xy. + */ + def pow(x: Double, y: Double): Double = java.lang.Math.pow(x, y) + + /** Returns the closest long to the argument. + * + * @param x a floating-point value to be rounded to a long. + * @return the value of the argument rounded to the nearest + * long value. + */ + def round(x: Float): Int = java.lang.Math.round(x) + def round(x: Double): Long = java.lang.Math.round(x) + def abs(x: Int): Int = java.lang.Math.abs(x) + def abs(x: Long): Long = java.lang.Math.abs(x) + def abs(x: Float): Float = java.lang.Math.abs(x) + def abs(x: Double): Double = java.lang.Math.abs(x) + + def max(x: Int, y: Int): Int = java.lang.Math.max(x, y) + def max(x: Long, y: Long): Long = java.lang.Math.max(x, y) + def max(x: Float, y: Float): Float = java.lang.Math.max(x, y) + def max(x: Double, y: Double): Double = java.lang.Math.max(x, y) + + def min(x: Int, y: Int): Int = java.lang.Math.min(x, y) + def min(x: Long, y: Long): Long = java.lang.Math.min(x, y) + 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 = + 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 +} diff --git a/src/library/scala/math/package.scala b/src/library/scala/math/package.scala index 0337b70c73..3c62537f64 100644 --- a/src/library/scala/math/package.scala +++ b/src/library/scala/math/package.scala @@ -13,134 +13,8 @@ package scala * trigonometric functions. */ -package object math { - /** The double value that is closer than any other to - * e, the base of the natural logarithms. - */ - val E = java.lang.Math.E - - /** The double value that is closer than any other to - * pi, the ratio of the circumference of a circle to its - * diameter. - */ - val Pi = java.lang.Math.PI - - /** Returns a double value with a positive sign, greater than - * or equal to 0.0 and less than 1.0. - */ - def random: Double = java.lang.Math.random() - - def sin(x: Double): Double = java.lang.Math.sin(x) - def cos(x: Double): Double = java.lang.Math.cos(x) - def tan(x: Double): Double = java.lang.Math.tan(x) - def asin(x: Double): Double = java.lang.Math.asin(x) - def acos(x: Double): Double = java.lang.Math.acos(x) - def atan(x: Double): Double = java.lang.Math.atan(x) - - /** Converts an angle measured in degrees to an approximately equivalent - * angle measured in radians. - * - * @param x an angle, in degrees - * @return the measurement of the angle x in radians. - */ - def toRadians(x: Double): Double = java.lang.Math.toRadians(x) - - /** Converts an angle measured in radians to an approximately equivalent - * angle measured in degrees. - * - * @param x angle, in radians - * @return the measurement of the angle x in degrees. - */ - def toDegrees(x: Double): Double = java.lang.Math.toDegrees(x) - - /** Returns Euler's number e raised to the power of a - * double value. - * - * @param x the exponent to raise e to. - * @return the value ea, where e - * is the base of the natural logarithms. - */ - def exp(x: Double): Double = java.lang.Math.exp(x) - def log(x: Double): Double = java.lang.Math.log(x) - def sqrt(x: Double): Double = java.lang.Math.sqrt(x) - def IEEEremainder(x: Double, y: Double): Double = java.lang.Math.IEEEremainder(x, y) - - def ceil(x: Double): Double = java.lang.Math.ceil(x) - def floor(x: Double): Double = java.lang.Math.floor(x) - - /** Returns the double value that is closest in value to the - * argument and is equal to a mathematical integer. - * - * @param x a double value - * @return the closest floating-point value to a that is equal to a - * mathematical integer. - */ - def rint(x: Double): Double = java.lang.Math.rint(x) - - /** Converts rectangular coordinates (x, y) to polar - * (r, theta). - * - * @param x the ordinate coordinate - * @param y the abscissa coordinate - * @return the theta component of the point (r, theta) - * in polar coordinates that corresponds to the point - * (x, y) in Cartesian coordinates. - */ - def atan2(y: Double, x: Double): Double = java.lang.Math.atan2(y, x) - - /** Returns the value of the first argument raised to the power of the - * second argument. - * - * @param x the base. - * @param y the exponent. - * @return the value xy. - */ - def pow(x: Double, y: Double): Double = java.lang.Math.pow(x, y) - - /** Returns the closest long to the argument. - * - * @param x a floating-point value to be rounded to a long. - * @return the value of the argument rounded to the nearest - * long value. - */ - def round(x: Float): Int = java.lang.Math.round(x) - def round(x: Double): Long = java.lang.Math.round(x) - def abs(x: Int): Int = java.lang.Math.abs(x) - def abs(x: Long): Long = java.lang.Math.abs(x) - def abs(x: Float): Float = java.lang.Math.abs(x) - def abs(x: Double): Double = java.lang.Math.abs(x) - - def max(x: Int, y: Int): Int = java.lang.Math.max(x, y) - def max(x: Long, y: Long): Long = java.lang.Math.max(x, y) - def max(x: Float, y: Float): Float = java.lang.Math.max(x, y) - def max(x: Double, y: Double): Double = java.lang.Math.max(x, y) - - def min(x: Int, y: Int): Int = java.lang.Math.min(x, y) - def min(x: Long, y: Long): Long = java.lang.Math.min(x, y) - 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 = - 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 +package object math extends MathCommon { + // These are new in 2.8, so they don't belong in the deprecated scala.Math. def log10(x: Double): Double = java.lang.Math.log10(x) def cbrt(x: Double): Double = java.lang.Math.cbrt(x) -- cgit v1.2.3