NUMAL Section 6.2
BEGIN SECTION : 6.2 (January, 1979)
AUTHOR: D.T.WINTER.
INSTITUTE: MATHEMATICAL CENTRE,AMSTERDAM.
RECEIVED: 751208.
BRIEF DESCRIPTION:
THIS SECTION CONTAINS SEVEN PROCEDURES:
A) MBASE: DELIVERS THE BASE OF THE ARITHMETIC OF THE COMPUTER;
B) ARREB: DELIVERS THE ARITHMETIC ERROR BOUND OF THE COMPUTER;
C) DWARF: DELIVERS THE SMALLEST (IN ABSOLUTE VALUE) REPRESENTABLE
REAL NUMBER;
D) GIANT: DELIVERS THE LARGEST REPRESENTABLE REAL NUMBER;
E) INTCAP: DELIVERS THE INTEGER CAPACITY;
F) OVERFLOW: TESTS WHETHER A VALUE IS AN OVERFLOW VALUE;
G) UNDERFLOW: TESTS WHETHER A VALUE IS AN UNDERFLOW VALUE;
FOR A DETAILED DESCRIPTION SEE METHOD AND PERFORMANCE.
KEYWORDS:
ARITHMETIC CONSTANTS
MACHINE CONSTANTS
OVERFLOW
UNDERFLOW
SUBSECTION: MBASE
CALLING SEQUENCE:
THE HEADING OF THE PROCEDURE IS:
"INTEGER" "PROCEDURE" MBASE;
"CODE" 30001;
MBASE:= 2, THE BASE OF THE ARITHMETIC OF THE CYBER.
LANGUAGE: COMPASS
SUBSECTION: ARREB
CALLING SEQUENCE:
THE HEADING OF THE PROCEDURE IS:
"REAL" "PROCEDURE" ARREB;
"CODE" 30002;
ARREB:= 2 ** (-47), THE ARITHMETIC RELATIVE ERROR BOUND.
LANGUAGE: COMPASS
SUBSECTION: DWARF
CALLING SEQUENCE:
THE HEADING OF THE PROCEDURE IS:
"REAL" "PROCEDURE" DWARF;
"CODE" 30003;
DWARF:= THE SMALLEST (IN ABSOLUTE VALUE) REPRESENTABLE REAL NUMBER.
LANGUAGE: COMPASS
SUBSECTION: GIANT
CALLING SEQUENCE:
THE HEADING OF THE PROCEDURE IS:
"REAL" "PROCEDURE" GIANT;
"CODE" 30004;
GIANT:= THE LARGEST REPRESENTABLE REAL NUMBER.
LANGUAGE: COMPASS
SUBSECTION: INTCAP
CALLING SEQUENCE:
THE HEADING OF THE PROCEDURE IS:
"INTEGER" "PROCEDURE" INTCAP;
"CODE" 30005;
INTCAP:= THE INTEGER CAPACITY.
LANGUAGE: COMPASS
SUBSECTION: OVERFLOW
CALLING SEQUENCE:
THE HEADING OF THE PROCEDURE IS:
"BOOLEAN" "PROCEDURE" OVERFLOW(X); "VALUE" X; "REAL" X;
"CODE" 30008;
THE MEANING OF THE FORMAL PARAMETER IS:
X: <REAL VARIABLE>;
CONTAINS THE VALUE TO BE TESTED.
OVERFLOW DELIVERS "TRUE" IF X CONTAINS AN OVERFLOW VALUE, AND
"FALSE" OTHERWISE.
LANGUAGE: COMPASS
SUBSECTION: UNDERFLOW
CALLING SEQUENCE:
THE HEADING OF THE PROCEDURE IS:
"BOOLEAN" "PROCEDURE" UNDERFLOW(X); "VALUE" X; "REAL" X;
"CODE" 30009;
THE MEANING OF THE FORMAL PARAMETER IS:
X: <REAL VARIABLE>;
CONTAINS THE VALUE TO BE TESTED.
UNDERFLOW DELIVERS "TRUE" IF X CONTAINS AN UNDERFLOW VALUE, AND
"FALSE" OTHERWISE.
LANGUAGE: COMPASS
METHOD AND PERFORMANCE:
THE PROCEDURES DELIVER THE FOLLOWING VALUES, THAT ARE ESSENTIALLY
MACHINE DEPENDENT:
1) MBASE: 2;
2) ARREB: 2**(-47);
3) DWARF: 2**48*2**(-1022);
4) GIANT: (2**48-1)*2**1022;
5) INTCAP: 2**48-2.
FOR MBASE, DWARF AND GIANT THE VALUES ARE CLEAR, WE EXPLAIN THE
OTHERS HERE:
ARREB: THIS IS THE SMALLEST POSITIVE NUMBER SO THAT 1+ARREB^=1;
INTCAP: THIS IS THE LARGEST POSITIVE NUMBER SO THAT THE FOLLOWING
BOOLEAN EXPRESSION DELIVERS "TRUE" FOR EVERY INTEGER I:
"IF" I<0 "OR" I>INTCAP "THEN" "TRUE" "ELSE" I-1^=I;
THE CORRECT VALUE IS NOT 2**48-1, AS IN THE CYBER ARITHMETIC
I=J IF I=2**48 AND J=2**48-1.
WARNING: DWARF IS NOT VERY USEFUL WHEN TRAPPING UNDERFLOW VALUES:
ABS(X) >= DWARF NEARLY ALWAYS DELIVERS TRUE EVEN IF ABS(X) IS
SMALLER THEN DWARF DUE TO THE ARITHMETIC. ONE SHOULD USE:
ABS(X) > DWARF (AND ONE TRAPS NON-UNDERFLOW VALUES TOO) OR
THE PROCEDURE UNDERFLOW.
NOTE: AS THE ALGOL 60 ERRORMESSAGE "ARITHMETIC OVERFLOW"
IS NOT ISSUED AT THE MOMENT THE OVERFLOW VALUE
IS CREATED BUT WHEN SUCH A VALUE IS USED, THE
PROCEDURE OVERFLOW IS WELL-DEFINED.
EXAMPLE OF USE:
HERE WE GIVE AN EXAMPLE OF USE OF THE PROCEDURES OVERFLOW AND
UNDERFLOW:
"BEGIN"
"REAL" X, Y;
Y:= 0; X:= 1 / Y;
"IF" OVERFLOW(X) "THEN" OUTPUT(61, "(""("OVERFLOW")", /")");
X:= DWARF; Y:= 2.0;
"IF" "NOT" UNDERFLOW(X) "THEN"
OUTPUT(61, "(""("NO UNDERFLOW WITH DWARF")", /")");
X:= X / Y;
"IF" X ^= 0 "THEN"
OUTPUT(61, "(""("DWARF / 2 ^= 0")", /")");
"IF" UNDERFLOW(X) "THEN"
OUTPUT(61, "(""("DWARF / 2 IS UNDERFLOW")", /")");
"IF" X * Y = 0 "THEN"
OUTPUT(61, "(""("BECAUSE (DWARF / 2) * 2 = 0")", /")")
"END"
RESULTS:
OVERFLOW
NO UNDERFLOW WITH DWARF
DWARF / 2 ^= 0
DWARF / 2 IS UNDERFLOW
BECAUSE (DWARF / 2) * 2 = 0
SOURCE TEXTS:
THESE ARE NOT THE ACTUAL SOURCE TEXTS, AS THESE PROCEDURES ARE
WRITTEN IN COMPASS, MOREOVER, THE RESULTS NEED NOT BE THAT OF THE
ACTUAL PROCEDURES.
THE SOURCE TEXTS OF OVERFLOW AND UNDERFLOW ARE NOT GIVEN HERE, AS
THESE EVEN CANNOT BE SIMULATED IN ALGOL-60.
"CODE" 30001;
"CODE" 30002;
"CODE" 30003;
"CODE" 30004;
"CODE" 30005;