I1MACH
Return to Main Software Page
C
C----------------------------------------------------------------------
C FUNCTION: I1MACH
C THIS ROUTINE IS FROM THE PORT MATHEMATICAL SUBROUTINE LIBRARY
C IT IS DESCRIBED IN THE BELL LABORATORIES COMPUTING SCIENCE
C TECHNICAL REPORT #47 BY P.A. FOX, A.D. HALL AND N.L. SCHRYER
C---------------------------------------------------------------------
C
INTEGER FUNCTION I1MACH(I)
C
C I/O UNIT NUMBERS.
C
C I1MACH( 1) = THE STANDARD INPUT UNIT.
C
C I1MACH( 2) = THE STANDARD OUTPUT UNIT.
C
C I1MACH( 3) = THE STANDARD PUNCH UNIT.
C
C I1MACH( 4) = THE STANDARD ERROR MESSAGE UNIT.
C
C WORDS.
C
C I1MACH( 5) = THE NUMBER OF BITS PER INTEGER STORAGE UNIT.
C
C I1MACH( 6) = THE NUMBER OF CHARACTERS PER INTEGER STORAGE UNIT.
C
C INTEGERS.
C
C ASSUME INTEGERS ARE REPRESENTED IN THE S-DIGIT, BASE-A FORM
C
C SIGN ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) )
C
C WHERE 0 .LE. X(I) .LT. A FOR I=0,...,S-1.
C
C I1MACH( 7) = A, THE BASE.
C
C I1MACH( 8) = S, THE NUMBER OF BASE-A DIGITS.
C
C I1MACH( 9) = A**S - 1, THE LARGEST MAGNITUDE.
C
C FLOATING-POINT NUMBERS.
C
C ASSUME FLOATING-POINT NUMBERS ARE REPRESENTED IN THE T-DIGIT,
C BASE-B FORM
C
C SIGN (B**E)*( (X(1)/B) + ... + (X(T)/B**T) )
C
C WHERE 0 .LE. X(I) .LT. B FOR I=1,...,T,
C 0 .LT. X(1), AND EMIN .LE. E .LE. EMAX.
C
C I1MACH(10) = B, THE BASE.
C
C SINGLE-PRECISION
C
C I1MACH(11) = T, THE NUMBER OF BASE-B DIGITS.
C
C I1MACH(12) = EMIN, THE SMALLEST EXPONENT E.
C
C I1MACH(13) = EMAX, THE LARGEST EXPONENT E.
C
C DOUBLE-PRECISION
C
C I1MACH(14) = T, THE NUMBER OF BASE-B DIGITS.
C
C I1MACH(15) = EMIN, THE SMALLEST EXPONENT E.
C
C I1MACH(16) = EMAX, THE LARGEST EXPONENT E.
C
C TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT,
C THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY
C REMOVING THE C FROM COLUMN 1. ALSO, THE VALUES OF
C I1MACH(1) - I1MACH(4) SHOULD BE CHECKED FOR CONSISTENCY
C WITH THE LOCAL OPERATING SYSTEM.
C
INTEGER IMACH(16),OUTPUT
C
EQUIVALENCE (IMACH(4),OUTPUT)
C
C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM.
C
C DATA IMACH( 1) / 7 /
C DATA IMACH( 2) / 2 /
C DATA IMACH( 3) / 2 /
C DATA IMACH( 4) / 2 /
C DATA IMACH( 5) / 36 /
C DATA IMACH( 6) / 4 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 33 /
C DATA IMACH( 9) / Z1FFFFFFFF /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 24 /
C DATA IMACH(12) / -256 /
C DATA IMACH(13) / 255 /
C DATA IMACH(14) / 60 /
C DATA IMACH(15) / -256 /
C DATA IMACH(16) / 255 /
C
C MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM.
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 7 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 48 /
C DATA IMACH( 6) / 6 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 39 /
C DATA IMACH( 9) / O0007777777777777 /
C DATA IMACH(10) / 8 /
C DATA IMACH(11) / 13 /
C DATA IMACH(12) / -50 /
C DATA IMACH(13) / 76 /
C DATA IMACH(14) / 26 /
C DATA IMACH(15) / -50 /
C DATA IMACH(16) / 76 /
C
C MACHINE CONSTANTS FOR THE BURROUGHS 6700/7700 SYSTEMS.
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 7 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 48 /
C DATA IMACH( 6) / 6 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 39 /
C DATA IMACH( 9) / O0007777777777777 /
C DATA IMACH(10) / 8 /
C DATA IMACH(11) / 13 /
C DATA IMACH(12) / -50 /
C DATA IMACH(13) / 76 /
C DATA IMACH(14) / 26 /
C DATA IMACH(15) / -32754 /
C DATA IMACH(16) / 32780 /
C
C MACHINE CONSTANTS FOR THE CDC 6000/7000 SERIES.
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 7 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 60 /
C DATA IMACH( 6) / 10 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 48 /
C DATA IMACH( 9) / 00007777777777777777B /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 48 /
C DATA IMACH(12) / -974 /
C DATA IMACH(13) / 1070 /
C DATA IMACH(14) / 96 /
C DATA IMACH(15) / -927 /
C DATA IMACH(16) / 1070 /
C
C MACHINE CONSTANTS FOR THE CRAY 1
C
C DATA IMACH( 1) / 100 /
C DATA IMACH( 2) / 101 /
C DATA IMACH( 3) / 102 /
C DATA IMACH( 4) / 101 /
C DATA IMACH( 5) / 64 /
C DATA IMACH( 6) / 8 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 63 /
C DATA IMACH( 9) / 777777777777777777777B /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 47 /
C DATA IMACH(12) / -8192 /
C DATA IMACH(13) / 8190 /
C DATA IMACH(14) / 95 /
C DATA IMACH(15) / -8192 /
C DATA IMACH(16) / 8190 /
C
C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200
C
C DATA IMACH( 1) / 11 /
C DATA IMACH( 2) / 12 /
C DATA IMACH( 3) / 8 /
C DATA IMACH( 4) / 10 /
C DATA IMACH( 5) / 16 /
C DATA IMACH( 6) / 2 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 15 /
C DATA IMACH( 9) /32767 /
C DATA IMACH(10) / 16 /
C DATA IMACH(11) / 6 /
C DATA IMACH(12) / -64 /
C DATA IMACH(13) / 63 /
C DATA IMACH(14) / 14 /
C DATA IMACH(15) / -64 /
C DATA IMACH(16) / 63 /
C
C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 0 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 24 /
C DATA IMACH( 6) / 3 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 23 /
C DATA IMACH( 9) / 8388607 /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 23 /
C DATA IMACH(12) / -127 /
C DATA IMACH(13) / 127 /
C DATA IMACH(14) / 38 /
C DATA IMACH(15) / -127 /
C DATA IMACH(16) / 127 /
C
C MACHINE CONSTANTS FOR THE HONEYWELL 600/6000 SERIES.
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 43 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 36 /
C DATA IMACH( 6) / 6 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 35 /
C DATA IMACH( 9) / O377777777777 /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 27 /
C DATA IMACH(12) / -127 /
C DATA IMACH(13) / 127 /
C DATA IMACH(14) / 63 /
C DATA IMACH(15) / -127 /
C DATA IMACH(16) / 127 /
C
C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES,
C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86.
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 7 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 32 /
C DATA IMACH( 6) / 4 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 31 /
C DATA IMACH( 9) / Z7FFFFFFF /
C DATA IMACH(10) / 16 /
C DATA IMACH(11) / 6 /
C DATA IMACH(12) / -64 /
C DATA IMACH(13) / 63 /
C DATA IMACH(14) / 14 /
C DATA IMACH(15) / -64 /
C DATA IMACH(16) / 63 /
C
C MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR).
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 5 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 36 /
C DATA IMACH( 6) / 5 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 35 /
C DATA IMACH( 9) / "377777777777 /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 27 /
C DATA IMACH(12) / -128 /
C DATA IMACH(13) / 127 /
C DATA IMACH(14) / 54 /
C DATA IMACH(15) / -101 /
C DATA IMACH(16) / 127 /
C
C MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR).
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 5 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 36 /
C DATA IMACH( 6) / 5 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 35 /
C DATA IMACH( 9) / "377777777777 /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 27 /
C DATA IMACH(12) / -128 /
C DATA IMACH(13) / 127 /
C DATA IMACH(14) / 62 /
C DATA IMACH(15) / -128 /
C DATA IMACH(16) / 127 /
C
C MACHINE CONSTANTS FOR PDP-11 FORTRAN SUPPORTING
C 32-BIT INTEGER ARITHMETIC.
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 5 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 32 /
C DATA IMACH( 6) / 4 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 31 /
C DATA IMACH( 9) / 2147483647 /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 24 /
C DATA IMACH(12) / -127 /
C DATA IMACH(13) / 127 /
C DATA IMACH(14) / 56 /
C DATA IMACH(15) / -127 /
C DATA IMACH(16) / 127 /
C
C MACHINE CONSTANTS FOR PDP-11 FORTRAN SUPPORTING
C 16-BIT INTEGER ARITHMETIC.
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 5 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 16 /
C DATA IMACH( 6) / 2 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 15 /
C DATA IMACH( 9) / 32767 /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 24 /
C DATA IMACH(12) / -127 /
C DATA IMACH(13) / 127 /
C DATA IMACH(14) / 56 /
C DATA IMACH(15) / -127 /
C DATA IMACH(16) / 127 /
C
C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES.
C
C NOTE THAT THE PUNCH UNIT, I1MACH(3), HAS BEEN SET TO 7
C WHICH IS APPROPRIATE FOR THE UNIVAC-FOR SYSTEM.
C IF YOU HAVE THE UNIVAC-FTN SYSTEM, SET IT TO 1.
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 7 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 36 /
C DATA IMACH( 6) / 6 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 35 /
C DATA IMACH( 9) / O377777777777 /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 27 /
C DATA IMACH(12) / -128 /
C DATA IMACH(13) / 127 /
C DATA IMACH(14) / 60 /
C DATA IMACH(15) /-1024 /
C DATA IMACH(16) / 1023 /
C
C MACHINE CONSTANTS FOR THE VAX-11 WITH
C FORTRAN IV-PLUS COMPILER
C
C DATA IMACH( 1) / 5 /
C DATA IMACH( 2) / 6 /
C DATA IMACH( 3) / 5 /
C DATA IMACH( 4) / 6 /
C DATA IMACH( 5) / 32 /
C DATA IMACH( 6) / 4 /
C DATA IMACH( 7) / 2 /
C DATA IMACH( 8) / 31 /
C DATA IMACH( 9) / 2147483647 /
C DATA IMACH(10) / 2 /
C DATA IMACH(11) / 24 /
C DATA IMACH(12) / -127 /
C DATA IMACH(13) / 127 /
C DATA IMACH(14) / 56 /
C DATA IMACH(15) / -127 /
C DATA IMACH(16) / 127 /
C
IF (I .LT. 1 .OR. I .GT. 16) GO TO 10
C
I1MACH=IMACH(I)
RETURN
C
10 WRITE(OUTPUT,9000)
9000 FORMAT(39H1ERROR 1 IN I1MACH - I OUT OF BOUNDS)
C
STOP
C
END
Return to Main Software Page