| www.delorie.com/gnu/docs/kawa/kawa-tour_5.html | search |
![]() Buy GNU books! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Scheme defines a "numerical tower" of numerical types:
number, complex, real, rational, and integer.
Kawa implements the full "tower" of Scheme number types,
which are all sub-classes of the abstract
class Quantity discussed in 1.6 Quantities.
class Complex extends Quantity {
public abstract RealNum re ();
public abstract RealNum im ();
...
}
|
Complex is the class of abstract complex numbers.
It has three subclasses: the abstract class RealNum
of real numbers; the general class CComplex where the
components are arbitrary RealNum fields; and the
optimized DComplex where the components
are represented by double fields.
class RealNum extends Complex {
public final RealNum re ()
{ return this; }
public final RealNum im ()
{ return IntNum.zero(); }
public abstract boolean isNegative ();
...
}
|
class DFloNum extends RealNum {
double value;
...
}
|
Concrete class for double-precision (64-bit) floating-point real numbers.
class RatNum extends RealNum {
public abstract IntNum numerator();
public abstract IntNum denominator();
...
}
|
RatNum, the abstract class for exact rational numbers,
has two sub-classes: IntFraction and IntNum.
class IntFraction extends RatNum {
IntNum num;
IntNum den;
...
}
|
The IntFraction class implements fractions in the obvious way.
Exact real infinities are identified with the
fractions 1/0 and -1/0.
class IntNum extends RatNum {
int ival;
int[] words;
...
}
|
The IntNum concrete class implements infinite-precision integers.
The value is stored in the first ival elements of words,
in 2's complement form (with the low-order bits in word[0]).
There are already many bignum packages, including a couple written in Java. What are the advantages of this one?
double.
mpn routines
from the Gnu Multi-Precision library (gmp by T. Granlund).
The mpn routines are low-level algorithms that work
on unsigned pre-allocated bignums; they have been transcribed
into Java in the MPN class. If better efficiency is
desired, it is straight-forward to replace the MPN
methods with native ones that call the highly-optimized mpn functions.
If the integer value fits within a signed 32-bit int,
then it is stored in ival and words is null.
This avoids the need for extra memory allocation for the words
array, and also allows us to special-case the common case.
As a further optimization, the integers in the range -100 to 1024 are pre-allocated.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |