NUMAL Section 1.5.1
BEGIN SECTION : 1.5.1 (March, 1977)
AUTHORS: D.T.WINTER(A-D,F-I), T.J.DEKKER(E,J)
CONTRIBUTOR: J.KOOPMAN(E,J)
INSTITUTES: MATHEMATICAL CENTRE,UNIVERSITY OF AMSTERDAM.
RECEIVED: 770328
BRIEF DESCRIPTION:
THIS SECTION CONTAINS PROCEDURES FOR THE ELEMENTARY OPERATIONS IN
DOUBLE PRECISION ARITHMETIC.
A. DPADD ADDS TWO SINGLE PRECISION NUMBERS TO A DOUBLE PRECISION
SUM.
B. DPSUB SUBTRACTS TWO SINGLE PRECISION NUMBERS TO A DOUBLE
PRECISION DIFFERENCE.
C. DPMUL MULTIPLIES TWO SINGLE PRECISION NUMBERS TO A
DOUBLE PRECISION PRODUCT.
D. DPDIV DIVIDES TWO SINGLE PRECISION NUMBERS TO A DOUBLE
PRECISION QUOTIENT.
E. DPPOW COMPUTES A**EXPON IN DOUBLE PRECISION,WHERE
A IS A SINGLE PRECISION REAL NUMBER AND EXPON THE
INTEGER EXPONENT.
F. LNGADD ADDS TWO DOUBLE PRECISION NUMBERS.
G. LNGSUB SUBTRACTS TWO DOUBLE PRECISION NUMBERS.
H. LNGMUL MULTIPLIES TWO DOUBLE PRECISION NUMBERS.
I. LNGDIV DIVIDES TWO DOUBLE PRECISION NUMBERS.
J. LNGPOW COMPUTES (A,AA)**EXPON IN DOUBLE PRECISION,WHERE
(A,AA) IS A DOUBLE PRECISION REAL NUMBER AND EXPON
THE INTEGER EXPONENT.
KEYWORDS:
DOUBLE PRECISION ARITHMETIC
EXPONENTIATION.
LANGUAGE: COMPASS(A-D,F-I),ALGOL 60(E,J)
METHOD AND PERFORMANCE:
THE PROCEDURES A-D,F-I USE THE HARDWARE FUNCTIONS FOR DOUBLE
PRECISION THAT ARE AVAILIBLE ON THE CYBER.
THE PROCEDURES LNG ADD, LNG SUB, LNG MUL AND LNG DIV CHECK THE
INPUT PARAMETERS (A,AA) AND (B,BB) FOR CORRECTNESS. A HEAD/TAIL
PAIR IS A CORRECT DOUBLE PRECISION PARAMETER IN THE FOLLOWING
CASES:
A) THE TAIL IS ZERO;
B) THE EXPONENT IN THE BINARY REPRESENTATION OF THE TAIL IS 48
LESS THAN THE EXPONENT OF THE HEAD.
AN OUTPUT PARAMETER OF THESE PROCEDURES ALWAYS IS A CORRECT DOUBLE
PRECISION NUMBER. IF AN INPUT PARAMETER IS NOT CORRECT, THE ERROR
MESSAGE "DP PARAMETER TAIL ERROR" WILL BE ISSUED.
BOTH PROCEDURES E AND J MAKE USE OF THE BINARY REPRESENTATION OF
THE INTEGER EXPONENT. IF X DENOTES THE NUMBER THAT IS TO BE
EXPONENTIATED, THE PROCEDURES E AND J RUN AS FOLLOWS:
THE SEQUENCE X,X**2,X**4,X**8,... IS FORMED WHILE
SIMULTANEOUSLY THE BINARY REPRESENTATION OF THE EXPONENT
IS CHECKED; WHEN THE I-TH DIGIT EQUALS ONE,THE FACTOR
X**(2**(I-1)) IS TAKEN INTO ACCOUNT.
EXAMPLE OF USE:
SEE THE PROCEDURE LNGREATODECI (SECTION 1.5.3).
SUBSECTION: DP ADD
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE" DP ADD(A, B, C, CC);
"VALUE" A, B; "REAL" A, B, C, CC;
"CODE" 31101;
THE MEANING OF THE FORMAL PARAMETERS IS:
A,B: <ARITHMETIC EXPRESSIONS>;
THE OPERANDS;
C,CC: <REAL VARIABLES>;
THE HEAD AND TAIL OF THE DOUBLE PRECISION RESULT OF A+B.
SUBSECTION: DP SUB
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE" DP SUB(A, B, C, CC);
"VALUE" A, B; "REAL" A, B, C, CC;
"CODE" 31102;
THE MEANING OF THE FORMAL PARAMETERS IS:
A,B: <ARITHMETIC EXPRESSIONS>;
THE OPERANDS;
C,CC: <REAL VARIABLES>;
THE HEAD AND TAIL OF THE DOUBLE PRECISION RESULT OF A-B.
SUBSECTION: DP MUL
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE" DP MUL(A, B, C, CC);
"VALUE" A, B; "REAL" A, B, C, CC;
"CODE" 31103;
THE MEANING OF THE FORMAL PARAMETERS IS:
A,B: <ARITHMETIC EXPRESSIONS>;
THE OPERANDS;
C,CC: <REAL VARIABLES>;
THE HEAD AND TAIL OF THE DOUBLE PRECISION RESULT OF A*B.
SUBSECTION: DP DIV
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE" DP DIV(A, B, C, CC);
"VALUE" A, B; "REAL" A, B, C, CC;
"CODE" 31104;
THE MEANING OF THE FORMAL PARAMETERS IS:
A,B: <ARITHMETIC EXPRESSIONS>;
THE OPERANDS;
C,CC: <REAL VARIABLES>;
THE HEAD AND TAIL OF THE DOUBLE PRECISION RESULT OF A/B.
SUBSECTION: DP POW.
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE"DP POW(A ,EXPON ,C ,CC );
"VALUE"A,EXPON;"INTEGER"EXPON;"REAL"A,C,CC;
"CODE"31109;
THE MEANING OF THE FORMAL PARAMETERS IS:
A : <ARITHMETIC EXPRESSION>;
THE NUMBER THAT IS TO BE EXPONENTIATED;
EXPON : <ARITHMETIC EXPRESSION>;
THE (INTEGER) POWER TO WHICH A WILL BE RAISED;
C , CC : <REAL VARIABLES>;
EXIT: THE HEAD (C) AND TAIL (CC) OF THE DOUBLE
PRECISION RESULT A**EXPON.
PROCEDURES USED:
LNG POW = CP31110.
RUNNING TIME:
ROUGHLY PROPORTIONAL TO LN(EXPON).
SUBSECTION: LNG ADD
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE" LNG ADD(A, AA, B, BB, C, CC);
"VALUE" A, AA, B, BB; "REAL" A, AA, B, BB, C, CC;
"CODE" 31105;
THE MEANING OF THE FORMAL PARAMETERS IS:
A,AA,B,BB: <ARITHMETIC EXPRESSIONS>;
THE HEADS (A AND B) AND THE TAILS (AA AND BB) OF THE OPERANDS;
C,CC: <REAL VARIABLES>;
THE HEAD AND TAIL OF THE RESULT (A,AA)+(B,BB).
SUBSECTION: LNG SUB
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE" LNG SUB(A, AA, B, BB, C, CC);
"VALUE" A, AA, B, BB; "REAL" A, AA, B, BB, C, CC;
"CODE" 31106;
THE MEANING OF THE FORMAL PARAMETERS IS:
A,AA,B,BB: <ARITHMETIC EXPRESSIONS>;
THE HEADS (A AND B) AND THE TAILS (AA AND BB) OF THE OPERANDS;
C,CC: <REAL VARIABLES>;
THE HEAD AND TAIL OF THE RESULT (A,AA)-(B,BB).
SUBSECTION: LNG MUL
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE" LNG MUL(A, AA, B, BB, C, CC);
"VALUE" A, AA, B, BB; "REAL" A, AA, B, BB, C, CC;
"CODE" 31107;
THE MEANING OF THE FORMAL PARAMETERS IS:
A,AA,B,BB: <ARITHMETIC EXPRESSIONS>;
THE HEADS (A AND B) AND THE TAILS (AA AND BB) OF THE OPERANDS;
C,CC: <REAL VARIABLES>;
THE HEAD AND TAIL OF THE RESULT (A,AA)*(B,BB).
SUBSECTION: LNG DIV
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE" LNG DIV(A, AA, B, BB, C, CC);
"VALUE" A, AA, B, BB; "REAL" A, AA, B, BB, C, CC;
"CODE" 31108;
THE MEANING OF THE FORMAL PARAMETERS IS:
A,AA,B,BB: <ARITHMETIC EXPRESSIONS>;
THE HEADS (A AND B) AND THE TAILS (AA AND BB) OF THE OPERANDS;
C,CC: <REAL VARIABLES>;
THE HEAD AND TAIL OF THE RESULT (A,AA)/(B,BB).
SUBSECTION: LNG POW.
CALLING SEQUENCE:
THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS:
"PROCEDURE"LNG POW(A ,AA ,EXPON ,C ,CC );
"VALUE"A,AA,EXPON;"INTEGER"EXPON;"REAL"A,AA,C,CC;
"CODE"31110;
THE MEANING OF THE FORMAL PARAMETERS IS:
A,AA : <ARITHMETIC EXPRESSIONS>;
THE HEAD (A) AND TAIL (AA) OF THE NUMBER THAT
IS TO BE EXPONENTIATED;
EXPON : <ARITHMETIC EXPRESSION>;
THE (INTEGER) POWER TO WHICH (A,AA) WILL BE RAISED;
C,CC : <REAL VARIABLES>;
EXIT: THE HEAD (C) AND TAIL (CC) OF THE DOUBLE
PRECISION RESULT (A,AA)**EXPON.
PROCEDURES USED:
LNG MUL = CP31107.
LNG DIV = CP31108.
RUNNING TIME:
ROUGHLY PROPORTIONAL TO LN(EXPON).
SOURCE TEXT(S):
ALL PROCEDURES, EXCEPT POW AND LNG POW, ARE WRITTEN IN COMPASS, IT IS
NOT POSSIBLE TO SIMULATE THESE PROCEDURES IN ALGOL 60, SO ONLY THE TEXT
IS GIVEN FOR POW AND LNG POW.
"CODE" 31109;
"CODE" 31110;