Package org.jscience.mathematics.number


package org.jscience.mathematics.number

Provides common types of numbers most of them implementing the field interface.

Although numbers defined in this package are not as fast as primitives types (e.g. int or double). They have many advantages (such as arbitrary size for LargeInteger or precision for Real) which make them irreplaceable in some calculations. This can be illustrated with the following example:

        double x = 10864;
        double y = 18817;
        double z = 9 * Math.pow(x, 4.0)- Math.pow(y, 4.0) + 2 * Math.pow(y, 2.0);
        System.out.println("Result : " + z);

        > Result : 2.0
The mathematically correct value is z=1. However, Java compilers using ANSI/IEEE double precision numbers evaluate z=2. Not even the first digit is correct! This is due to a rounding error occurring when subtracting two nearly equal floating point numbers. Now, lets write the same formula using Real numbers:
        int accuracy = 20; // 20 decimal zeros for integer values.
        Real x = Real.valueOf(10864, accuracy);
        Real y = Real.valueOf(18817, accuracy);
        Real z = x.pow(4).times(9).plus(y.pow(4).opposite()).plus(y.pow(2).times(2));
        System.out.println("Result : " + z);

        > Result : 1.00000
Not only the correct result is returned, but this result is also guaranteed to be 1 ± 0.00001. Only exact digits are written out, for example the following displays the first exact digits of sqrt(2):
    Real two = Real.valueOf(2, 100); // 2.0000..00 (100 zeros after decimal point).
    Real sqrt2 = two.sqrt();
    System.out.println("sqrt(2)   = " + sqrt2);
    System.out.println("Precision = " + sqrt2.getPrecision() + " digits.");
    
    > sqrt(2)   = 1.414213562373095048801688724209698078569671875376948
    > Precision = 53 digits.

  • Classes
    Class
    Description
    This class represents an immutable complex number.
    This class represents a 64 bits floating point number.
    This class represents a floating point number of arbitrary precision.
    This class represents a 64 bits integer number.
    This class represents an immutable integer number of arbitrary size.
    This class represents a modulo integer.
    Number<T extends Number<T>>
    This class represents a value-type number.
    This class represents the ratio of two LargeInteger numbers.
    This class represents a real number of arbitrary precision with known/guaranteed uncertainty.