Class Real
- java.lang.Object
-
- java.lang.Number
-
- org.jscience.mathematics.number.Number<Real>
-
- org.jscience.mathematics.number.Real
-
- All Implemented Interfaces:
Serializable
,Comparable<Real>
,javolution.lang.Immutable
,javolution.lang.Realtime
,javolution.lang.ValueType
,javolution.xml.XMLSerializable
,Field<Real>
,GroupAdditive<Real>
,GroupMultiplicative<Real>
,Ring<Real>
,Structure<Real>
public final class Real extends Number<Real> implements Field<Real>
This class represents a real number of arbitrary precision with known/guaranteed uncertainty. A real number consists of a
significand
, a maximumerror
(on the significand value) and a decimalexponent
: ((significand ± error) · 10exponent
).Reals number can be
exact
(e.g. integer values scaled by a power of ten). Exactness is maintained forRing
operations (e.g. addition, multiplication), but typically lost when a multiplicativeinverse
is calculated. The minimum precision used for exact numbers is set bysetExactPrecision(int)
(context local
setting, default19
digits).The actual
precision
andaccuracy
of any real number is available and guaranteed (the true/exact value is always within the precision/accuracy range).Operations on instances of this class are quite fast as information substantially below the precision level (aka noise) is not processed/stored. There is no limit on a real precision but precision degenerates (due to numeric errors) and calculations accelerate as more and more operations are performed.
Instances of this class can be utilized to find approximate solutions to linear equations using the
Matrix
class for which high-precision reals is often required, the primitive typedouble
being not accurate enough to resolve equations when the matrix's size exceeds 100x100. Furthermore, even for small matrices the "qualified" result is indicative of possible system singularities.- See Also:
- Wikipedia: Real number, Serialized Form
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Real
abs()
Returns the absolute value of this real number.boolean
approximates(Real that)
Indicates if this real approximates the one specified.int
compareTo(Real that)
Compares two real numbers numerically.Real
copy()
Returns a copy of this numberallocated
by the calling thread (possibly on the stack).Real
divide(long divisor)
Returns this real number divided by the specifiedint
divisor.Real
divide(Real that)
Returns this real number divided by the one specified.double
doubleValue()
Returns the value of this real number as adouble
.boolean
equals(Object that)
Compares this real number against the specified object.int
getAccuracy()
Returns the number of decimal digits guaranteed exact which appear to the right of the decimal point (absolute error).int
getError()
Returns the maximum error (positive) on this real significand.static int
getExactPrecision()
Returns thelocal
minimum precision (number of exact digits) when exact numbers have to be approximated.int
getExponent()
Returns the exponent of the power of 10 multiplier.int
getPrecision()
Returns the total number of decimal digits guaranteed exact (relative error).LargeInteger
getSignificand()
Returns this real significand value.int
hashCode()
Returns the hash code for this real number.Real
inverse()
Returns the reciprocal (or inverse) of this real number.boolean
isExact()
Indicates if this real number is exact (
).error
== 0boolean
isLargerThan(Real that)
Compares the absolute value of two real numbers.boolean
isNaN()
Indicates if this real is Not-a-Number (unbounded value interval).boolean
isNegative()
Indicates if this real is less than zero.boolean
isPositive()
Indicates if this real is greater than zero.long
longValue()
Returns the value of this real number as along
.Real
minus(Real that)
Returns the difference between this real number and the one specified.Real
opposite()
Returns the negation of this real number.Real
plus(Real that)
Returns the sum of this real number with the one specified.LargeInteger
round()
Returns the closest integer value to this rational number.static void
setExactPrecision(int precision)
Sets thelocal
minimum precision (number of exact digits) when exact numbers have to be approximated.Real
sqrt()
Returns the square root of this real number, the more accurate is this real number, the more accurate the square root.Real
times(long multiplier)
Returns the product of this real number with the specifiedlong
multiplier.Real
times(Real that)
Returns the product of this real number with the one specified.javolution.text.Text
toText()
Returns the decimal text representation of this number.static Real
valueOf(double doubleValue)
Returns the real number (inexact except for0.0
) corresponding to the specifieddouble
value.static Real
valueOf(long longValue)
Returns the exact real number corresponding to the specifiedlong
value (convenience method).static Real
valueOf(CharSequence chars)
Returns the real for the specified character sequence.static Real
valueOf(LargeInteger significand, int error, int exponent)
Returns a real having the specified significand, error and exponent values.-
Methods inherited from class org.jscience.mathematics.number.Number
byteValue, floatValue, intValue, isGreaterThan, isLessThan, pow, shortValue, toString
-
-
-
-
Method Detail
-
getExactPrecision
public static int getExactPrecision()
Returns thelocal
minimum precision (number of exact digits) when exact numbers have to be approximated.- Returns:
- the minimum number of digits assumed exact for
exact
real numbers.
-
setExactPrecision
public static void setExactPrecision(int precision)
Sets thelocal
minimum precision (number of exact digits) when exact numbers have to be approximated.- Parameters:
precision
- the minimum number of digits assumed exact forexact
numbers.
-
valueOf
public static Real valueOf(LargeInteger significand, int error, int exponent)
Returns a real having the specified significand, error and exponent values. If the error is0
, the real is assumed exact. For example:[code] // x = 0.0 ± 0.01 Real x = Real.valueOf(LargeInteger.ZERO, 1, -2); // y = -12.3 exact Real y = Real.valueOf(LargeInteger.valueOf(-123), 0, -1); [/code]- Parameters:
significand
- this real significand.error
- the maximum error on the significand.exponent
- the decimal exponent.- Returns:
(significand ± error)·10exponent)
- Throws:
IllegalArgumentException
- iferror < 0
-
valueOf
public static Real valueOf(double doubleValue)
Returns the real number (inexact except for0.0
) corresponding to the specifieddouble
value. The error is derived from the inexact representation ofdouble
values intrinsic to the 64 bits IEEE 754 format.- Parameters:
doubleValue
- thedouble
value to convert.- Returns:
- the corresponding real number.
-
valueOf
public static Real valueOf(long longValue)
Returns the exact real number corresponding to the specifiedlong
value (convenience method).- Parameters:
longValue
- the exact long value.- Returns:
Real.valueOf(LargeInteger.valueOf(longValue), 0, 0)
-
valueOf
public static Real valueOf(CharSequence chars) throws NumberFormatException
Returns the real for the specified character sequence. If the precision is not specified (using the±
symbol), the real is supposed exact. Example of valid character sequences:- "1.2E3" (1200 exact)
- "1.2E3±1E-2" (1200 ± 0.01)
- Parameters:
chars
- the character sequence.- Returns:
- the corresponding real number.
- Throws:
NumberFormatException
- if the character sequence does not contain a parsable real.
-
getSignificand
public LargeInteger getSignificand()
Returns this real significand value.- Returns:
- the significand.
-
getError
public int getError()
Returns the maximum error (positive) on this real significand.- Returns:
- the maximum error on the significand.
-
getExponent
public int getExponent()
Returns the exponent of the power of 10 multiplier.- Returns:
- the decimal exponent.
-
isExact
public boolean isExact()
Indicates if this real number is exact (
).error
== 0- Returns:
getError() == 0
-
getAccuracy
public int getAccuracy()
Returns the number of decimal digits guaranteed exact which appear to the right of the decimal point (absolute error).- Returns:
- a measure of the absolute error of this real number.
-
getPrecision
public final int getPrecision()
Returns the total number of decimal digits guaranteed exact (relative error).- Returns:
- a measure of the relative error of this real number.
-
isPositive
public boolean isPositive()
Indicates if this real is greater than zero.- Returns:
this > 0
-
isNegative
public boolean isNegative()
Indicates if this real is less than zero.- Returns:
this < 0
-
isNaN
public boolean isNaN()
Indicates if this real is Not-a-Number (unbounded value interval).- Returns:
true
if this number has unbounded value interval;false
otherwise.
-
approximates
public boolean approximates(Real that)
Indicates if this real approximates the one specified. This method takes into account possible errors (e.g. numeric errors) to make this determination.Note: This method returns
true
ifthis
orthat
isNaN()
(basically Not-A-Number approximates anything).- Parameters:
that
- the real to compare with.- Returns:
this ≈ that
-
round
public LargeInteger round()
Returns the closest integer value to this rational number.- Returns:
- this real rounded to the nearest integer.
- Throws:
ArithmeticException
- ifthis.isNaN()
-
opposite
public Real opposite()
Returns the negation of this real number.- Specified by:
opposite
in interfaceGroupAdditive<Real>
- Returns:
-this
.
-
plus
public Real plus(Real that)
Returns the sum of this real number with the one specified.- Specified by:
plus
in interfaceGroupAdditive<Real>
- Parameters:
that
- the real to be added.- Returns:
this + that
.
-
minus
public Real minus(Real that)
Returns the difference between this real number and the one specified.
-
times
public Real times(long multiplier)
Returns the product of this real number with the specifiedlong
multiplier.- Parameters:
multiplier
- thelong
multiplier.- Returns:
this · multiplier
.
-
divide
public Real divide(long divisor)
Returns this real number divided by the specifiedint
divisor.- Parameters:
divisor
- theint
divisor.- Returns:
this / divisor
-
divide
public Real divide(Real that)
Returns this real number divided by the one specified.- Parameters:
that
- the real divisor.- Returns:
this / that
.- Throws:
ArithmeticException
- ifthat.equals(ZERO)
-
inverse
public Real inverse()
Returns the reciprocal (or inverse) of this real number.- Specified by:
inverse
in interfaceGroupMultiplicative<Real>
- Returns:
1 / this
.
-
abs
public Real abs()
Returns the absolute value of this real number.- Returns:
|this|
.
-
isLargerThan
public boolean isLargerThan(Real that)
Compares the absolute value of two real numbers.- Specified by:
isLargerThan
in classNumber<Real>
- Parameters:
that
- the real number to be compared with.- Returns:
|this| > |that|
-
sqrt
public Real sqrt()
Returns the square root of this real number, the more accurate is this real number, the more accurate the square root.- Returns:
- the positive square root of this real number.
-
toText
public javolution.text.Text toText()
Returns the decimal text representation of this number.
-
equals
public boolean equals(Object that)
Compares this real number against the specified object.Note: This method returns
true
ifthis
orthat
is Not-A-Number
, even thoughDouble.NaN == Double.NaN
has the valuefalse
.
-
hashCode
public int hashCode()
Returns the hash code for this real number.
-
longValue
public long longValue()
Returns the value of this real number as along
.
-
doubleValue
public double doubleValue()
Returns the value of this real number as adouble
.- Specified by:
doubleValue
in classNumber<Real>
- Returns:
- the numeric value represented by this real after conversion
to type
double
.
-
compareTo
public int compareTo(Real that)
Compares two real numbers numerically.- Specified by:
compareTo
in interfaceComparable<Real>
- Specified by:
compareTo
in classNumber<Real>
- Parameters:
that
- the real to compare with.- Returns:
- -1, 0 or 1 as this real is numerically less than, equal to,
or greater than
that
. - Throws:
ClassCastException
-that
is not aReal
.
-
-