Multics Technical Bulletin MTB-695
ALM Math Routines
To: Distribution
From: Betty Wong
Date: 12 November 1984
Subject: Rewrite the System Math Routines
1. Abstract
This MTB presents a brief discussion on rewriting several ALM
coded math routines presently in bound_library_wired_. A more
detailed discussion of the numerical analysis involved will
follow in a revised MTB.
Comments on this MTB should be sent to the author -
via Multics mail to:
BWong.Multics on System M
via posted mail to:
Betty Wong
Advanced Computing Technology Centre
Foothills Professional Building
Room #301, 1620 - 29th Street N.W.
Calgary, Alberta T2N-4L7
CANADA
via telephone to:
(403)-270-5400
(403)-270-5408
________________________________________
Multics project internal documentation; not to be reproduced or
distributed outside the Multics project.
MTB-695 Multics Technical Bulletin
ALM Math Routines
TABLE OF CONTENTS
Section Page Subject
======= ==== =======
1 i Abstract
2 1 Introduction
3 2 Proposed Changes
4 3 Other Work to be Done
5 4 Expected Effects
Multics Technical Bulletin MTB-695
ALM Math Routines
2. Introduction
The existing Multics math routines were created by translating
versions of the corresponding GCOS math routines. Since then,
the GCOS math routines have been improved considerably and
support added for Hexadecimal Floating Point (HFP). On Multics,
support for HFP mode was added to the math routines using the
simplest approach possible without concern for making them fast
(see MTB-687 and MCRs 7066, 7067, and 7069). Thus most of the
current Multics math routines are not as fast or not as accurate
as they should be in either Binary or Hexadecimal Floating Point
mode. To rectify this, we propose to rewrite some of the ALM
coded math routines on Multics using the algorithms of the
current GCOS versions. In addition, we will prevent the
underflow and overflow conditions that may occur in the current
routines.
The changes will affect programs written in PL/1 or Fortran which
call these routines.
MTB-695 Multics Technical Bulletin
ALM Math Routines
3. Proposed Changes
At this time we will deal with only the 'primitive' math
functions that are presently coded in ALM and are bound into
'bound_library_wired_'.
The following routines will be created using the algorithms of
the corresponding GCOS routines:
arc_sine_ double_arc_sine_
arc_tangent_ double_arc_tangent_
exponential_ double_exponential_
logarithm_ double_logarithm_
sine_ double_sine_
square_root_ double_square_root_
tangent_ double_tangent_
The primitive functions power_, power_integer_, and
integer_power_integer_ in 'bound_library_wired_' will not be
rewritten as there is little difference between the current
algorithms and the current GCOS versions.
In addition, there are several primitive functions that are
currently implemented in PL/1 and are bound into 'bound_math_'
(e.g. 'sinh'). Although we do not propose to rewrite these
functions at this time, it would be beneficial to derive ALM
versions from the current GCOS routines which are coded in
assembly language.
Multics Technical Bulletin MTB-695
ALM Math Routines
4. Other Work to be Done
The translation of the GCOS routines to Multics will require a
good deal of numerical analysis. The algorithms will be checked
for accuracy and corrected if required. Each routine will be
analyzed to identify potential underflow and overflow conditions.
Code will be added to the routines to recognize these conditions
and to take appropriate actions.
Some examples of potential underflow conditions are when
evaluating the sine, cosine, or tangent of values which are very
close to zero. Overflows may occur when evaluating arctangent
(y,x), where y has a very large magnitude and x has a very small
magnitude.
MTB-695 Multics Technical Bulletin
ALM Math Routines
5. Expected Effects
It is expected that the new routines will execute faster in
Hexadecimal Floating Point (HFP) mode. Currently the approach in
HFP mode is to use mathematical properties of a function to
derive a formula for evaluating the function in terms of the
Binary Floating Point (BFP) version of the function (see MTB 687
for more information). This involves converting between BFP and
HFP representations of a number. The new routines will eliminate
the need for this conversion since they will support HFP mode
directly. Also, because conversions are not performed, we expect
results to be more accurate in HFP mode.
The new versions of double_tangent_, arc_sine_, and
double_arc_sine_ are expected to execute faster in both BFP and
HFP mode. This is because internal calls to other routines will
be eliminated. Currently, double_tangent_ calls double_sine_ and
double_cosine_, arc_sine_ calls arc_tangent_, and
double_arc_sine_ calls double_arc_tangent_.