org.codehaus.groovy.runtime
Class NumberMath
java.lang.Object
org.codehaus.groovy.runtime.NumberMath
- Direct Known Subclasses:
- BigDecimalMath, BigIntegerMath, FloatingPointMath, IntegerMath, LongMath
- public abstract class NumberMath
- extends java.lang.Object
Stateless objects used to perform math on the various Number subclasses.
Instances are required so that polymorphic calls work properly, but each
subclass creates a singleton instance to minimize garbage. All methods
must be thread-safe.
The methods here represent only the operations supported by all Number
subclasses. For example power() is not implemented here because it is not
currently supported by BigDecimal (but will be in Java 1.5).
The design goals of this class are as follows:
- Support a 'least surprising' math model to scripting language users. This
means that exact, or decimal math should be used for default calculations. This
scheme assumes that by default, groovy literals with decimal points are instantiated
as BigDecimal objects rather than binary floating points (Float, Double).
- Do not force the appearance of exactness on a number that is by definition not
guaranteed to be exact. In particular this means that if an operand in a NumberMath
operation is a binary floating point number, ensure that the result remains a binary floating point
number (i.e. never automatically promote a binary floating point number to a BigDecimal).
This has the effect of preserving the expectations of binary floating point users and helps performance.
- Provide an implementation that is as close as practical to the Java 1.5 BigDecimal math model
which implements precision based floating point decimal math (ANSI X3.274-1996 and
ANSI X3.274-1996/AM 1-2000 (section 7.4).
- Author:
- Steve Goetze
Method Summary |
static java.lang.Number |
abs(java.lang.Number number)
|
protected abstract java.lang.Number |
absImpl(java.lang.Number number)
|
static java.lang.Number |
add(java.lang.Number left,
java.lang.Number right)
|
protected abstract java.lang.Number |
addImpl(java.lang.Number left,
java.lang.Number right)
|
static int |
compareTo(java.lang.Number left,
java.lang.Number right)
|
protected abstract int |
compareToImpl(java.lang.Number left,
java.lang.Number right)
|
static java.lang.Number |
divide(java.lang.Number left,
java.lang.Number right)
|
protected abstract java.lang.Number |
divideImpl(java.lang.Number left,
java.lang.Number right)
|
static boolean |
isBigDecimal(java.lang.Number number)
|
static boolean |
isBigInteger(java.lang.Number number)
|
static boolean |
isFloatingPoint(java.lang.Number number)
|
static boolean |
isInteger(java.lang.Number number)
|
static boolean |
isLong(java.lang.Number number)
|
static java.lang.Number |
multiply(java.lang.Number left,
java.lang.Number right)
|
protected abstract java.lang.Number |
multiplyImpl(java.lang.Number left,
java.lang.Number right)
|
static java.lang.Number |
subtract(java.lang.Number left,
java.lang.Number right)
|
protected abstract java.lang.Number |
subtractImpl(java.lang.Number left,
java.lang.Number right)
|
static java.math.BigDecimal |
toBigDecimal(java.lang.Number n)
|
static java.math.BigInteger |
toBigInteger(java.lang.Number n)
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
NumberMath
public NumberMath()
abs
public static java.lang.Number abs(java.lang.Number number)
add
public static java.lang.Number add(java.lang.Number left,
java.lang.Number right)
subtract
public static java.lang.Number subtract(java.lang.Number left,
java.lang.Number right)
multiply
public static java.lang.Number multiply(java.lang.Number left,
java.lang.Number right)
divide
public static java.lang.Number divide(java.lang.Number left,
java.lang.Number right)
compareTo
public static int compareTo(java.lang.Number left,
java.lang.Number right)
isFloatingPoint
public static boolean isFloatingPoint(java.lang.Number number)
isInteger
public static boolean isInteger(java.lang.Number number)
isLong
public static boolean isLong(java.lang.Number number)
isBigDecimal
public static boolean isBigDecimal(java.lang.Number number)
isBigInteger
public static boolean isBigInteger(java.lang.Number number)
toBigDecimal
public static java.math.BigDecimal toBigDecimal(java.lang.Number n)
toBigInteger
public static java.math.BigInteger toBigInteger(java.lang.Number n)
absImpl
protected abstract java.lang.Number absImpl(java.lang.Number number)
addImpl
protected abstract java.lang.Number addImpl(java.lang.Number left,
java.lang.Number right)
subtractImpl
protected abstract java.lang.Number subtractImpl(java.lang.Number left,
java.lang.Number right)
multiplyImpl
protected abstract java.lang.Number multiplyImpl(java.lang.Number left,
java.lang.Number right)
divideImpl
protected abstract java.lang.Number divideImpl(java.lang.Number left,
java.lang.Number right)
compareToImpl
protected abstract int compareToImpl(java.lang.Number left,
java.lang.Number right)
Copyright © 2003-2004 The Codehaus. All Rights Reserved.