[BACK]Return to READ_ME CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Numbers

Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Numbers/READ_ME, Revision 1.1.1.1

1.1       maekawa     1: Basic number definitions, coefficient rings and fields for PHCv2.
                      2:
                      3: The definition of floating-point numbers is such that it is independent
                      4: of the pre-defined type "float".  New in the second version of PHC are
                      5: the multi-precision numbers.  This new feature is motivated by the demand
                      6: for robustness in semi-numerical computations, where we have to deal with
                      7: either badly-scaled input or singularities at the end of the computations.
                      8: The precision limits of the standard machine number do not always suffice.
                      9: However, software-driven arithmetic leads to a considerable loss in efficiency,
                     10: especially if we rely on the grammar school algorithms as the ones used here.
                     11:
                     12: The library is divided in three parts:
                     13: 1) encapsulation of standard machine types, packages group definitions
                     14: 2) implementation of the multi-precision arithmetic
                     15: 3) embedding : generics + instantiation, no implementation!
                     16: In addition we have random number generators and numbers_io,
                     17: besides the usual testing facilities.
                     18:
                     19: --------------------------------------------------------------------------------
                     20: file name                         : short description
                     21: --------------------------------------------------------------------------------
                     22: standard_natural_numbers          : defines the standard naturals
                     23: standard_natural_numbers_io       : input/output of standard naturals
                     24: standard_integer_numbers          : defines the standard integers
                     25: standard_integer_numbers_io       : input/output of standard integers
                     26: standard_floating_numbers         : defines single_float and double_float
                     27: standard_floating_numbers_io      : input/output of standard floating-point
                     28: standard_mathematical_functions   : defines math functions for standard floats
                     29: --------------------------------------------------------------------------------
                     30: characters_and_numbers            : utilities to input/output of numbers
                     31: multprec_natural_numbers          : natural numbers of arbitrary length
                     32: multprec_natural_numbers_io       : input/output routines of natural numbers
                     33: multprec_integer_numbers          : integer numbers of arbitrary length
                     34: multprec_integer_numbers_io       : input/output routines of integer numbers
                     35: multprec_floating_numbers         : multi-precision floating-point numbers
                     36: multprec_floating_numbers_io      : input/output routines of floating numbers
                     37: multprec_mathematical_functions   : defines math functions for multprec floats
                     38: generic_complex_numbers           : complex numbers over any real field
                     39: standard_complex_numbers          : implementation of complex numbers
                     40: standard_complex_numbers_io       : input/output of standard complex numbers
                     41: standard_complex_numbers_polar    : polar view on standard complex numbers
                     42: multprec_complex_numbers          : multi-precision complex numbers
                     43: multprec_complex_numbers_io       : input/output for multi-precision complex
                     44: multprec_complex_number_tools     : conversion/set_size operators
                     45: --------------------------------------------------------------------------------
                     46: abstract_ring                     : a ring has the operations +,- and *
                     47: abstract_ring_io                  : definition of input/output for a ring
                     48: abstract_ring-domain              : extension with order and division/remainder
                     49: abstract_ring-field               : extension with order and division
                     50: standard_natural_ring             : ring of standard natural numbers
                     51: standard_natural_ring_io          : abstract_ring_io(standard natural)
                     52: standard_integer_ring             : ring of standard integer numbers
                     53: standard_integer_ring_io          : abstract_ring_io(standard integer)
                     54: standard_integer_ring-domain      : domain of standard integer numbers
                     55: standard_floating_ring            : ring of standard floating-point numbers
                     56: standard_floating_ring_io         : abstract_ring_io(standard floating)
                     57: standard_floating_ring-ffield     : field of standard floating numbers
                     58: standard_complex_ring             : ring of standard complex numbers
                     59: standard_complex_ring_io          : abstract_ring_io(standard complex)
                     60: multprec_natural_ring             : ring of multi-precision natural numbers
                     61: multprec_natural_ring_io          : abstract_ring_io(multprec natural)
                     62: multprec_integer_ring             : ring of multi-precision integer numbers
                     63: multprec_integer_ring_io          : abstract_ring_io(multprec integer)
                     64: multprec_integer_ring-ddomain     : domain of multi-precision integer numbers
                     65: multprec_floating_ring            : ring of multi-precision floating numbers
                     66: multprec_floating_ring_io         : abstract_ring_io(multprec floating)
                     67: multprec_floating_ring-ffield     : field of multi-precision floating numbers
                     68: multprec_complex_ring             : ring of multi-precision complex numbers
                     69: multprec_complex_ring_io          : abstract_ring_io(multprec complex)
                     70: --------------------------------------------------------------------------------
                     71: numbers_io                        : user-friendly way of asking a number
                     72: standard_random_numbers           : generates random standard numbers
                     73: multprec_random_numbers           : generates random multi-precision numbers
                     74: --------------------------------------------------------------------------------
                     75: ts_natnum                         : test multi-precision natural numbers
                     76: ts_intnum                         : test multi-precision integer numbers
                     77: ts_fltnum                         : test multi-precision floating numbers
                     78: ts_cmpnum                         : test multi-precision complex numbers
                     79: ts_random                         : test random number generators
                     80: --------------------------------------------------------------------------------
                     81:
                     82: Natural numbers are seen as unsigned integer numbers and are also provided
                     83: with a "-" operation, although these operations do not always make sense.
                     84: The correct mathematically way is to define a monoid, but this would have
                     85: led to the definition of more vector packages.  Moreover, due to memory memory
                     86: limitations, rings do not exists in a computer, since it is always possible
                     87: to find two huge numbers for which the memory is insufficient to contain
                     88: their sum or product.  An Euclidean domain is defined as an extension of
                     89: the ring with order and division/remainder operations.  A field is a similar
                     90: extension of the ring with order and division operations.
                     91:
                     92: The multi-precision packages are at the next-lowest level.
                     93: We first focus on how to implement the operations.  Afterwards
                     94: and independently, the interpretations/encapsulations are set up.
                     95:
                     96: Single precision floating-point numbers are defined, but not elaborated
                     97: since they are not used anyway.  I recall that on an IBM RS/6000, adding
                     98: single precision floating-point numbers took longer than adding double
                     99: precision floating-point numbers.
                    100:
                    101: The encapsulation of standard numerical types into packages seems a lot
                    102: of overkill, especially with the dummy procedures.
                    103: However, PHC has a now a uniform and clear treatment of numbers.
                    104:
                    105: The standard complex numbers are somewhat hybrid: software-driven but still
                    106: constant cost.  Somehow this is an encouragement to use multi-precision,
                    107: but in a restricted fashion: with an extended, but limited fractional part.
                    108: In this new implementation, complex numbers are implemented by a generic
                    109: package, where the real number type has to be instantiated.
                    110: The complex numbers are first only presented in their Cartesian view
                    111: and adapted so that they fit in the generic_ring.field framework.
                    112:
                    113: The test facilities include interactive little programs that allow to
                    114: test for special cases and tests on randomly generated numbers.
                    115: The "little" is only relative: we have 2000 lines of testing software.
                    116:
                    117: The "abstract"-packages are new in Ada 95.  At a technical level, they are
                    118: used as formal parameters to shorten the list of generics to packages.
                    119: In the object-oriented methodology, they are abstract classes.
                    120:
                    121: This library contains 86 files:
                    122:   1 READ_ME file
                    123:  55 specifications (ads), 4 abstract classes, 3 generic packages
                    124:  30 implementations (adb), including 6 test programs
                    125: wc *adb counts 8274 lines of Ada code

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>