aboutsummaryrefslogtreecommitdiff
path: root/unix/hlib/i1mach.f
diff options
context:
space:
mode:
Diffstat (limited to 'unix/hlib/i1mach.f')
-rw-r--r--unix/hlib/i1mach.f661
1 files changed, 661 insertions, 0 deletions
diff --git a/unix/hlib/i1mach.f b/unix/hlib/i1mach.f
new file mode 100644
index 00000000..733a6bb9
--- /dev/null
+++ b/unix/hlib/i1mach.f
@@ -0,0 +1,661 @@
+ 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 CHARACTER STORAGE UNIT.
+C FOR FORTRAN 77, THIS IS ALWAYS 1. FOR FORTRAN 66,
+C CHARACTER STORAGE UNIT = 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. FOR FORTRAN 77, YOU MAY WISH
+C TO ADJUST THE DATA STATEMENT SO IMACH(6) IS SET TO 1, AND
+C THEN TO COMMENT OUT THE EXECUTABLE TEST ON I .EQ. 6 BELOW.
+C
+C FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), THE FIRST
+C SET OF CONSTANTS BELOW SHOULD BE APPROPRIATE, EXCEPT PERHAPS
+C FOR IMACH(1) - IMACH(4).
+C
+C COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *)
+C GIVE C SOURCE FOR I1MACH.
+C
+ INTEGER IMACH(16), OUTPUT, SMALL(2), I
+C/6S
+C/7S
+ SAVE IMACH
+C/
+ REAL RMACH
+C
+ EQUIVALENCE (IMACH(4),OUTPUT), (RMACH,SMALL(1))
+C
+C MACHINE CONSTANTS FOR IEEE ARITHMETIC MACHINES, SUCH AS THE AT&T
+C 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. SUN 3 AND AT&T
+C PC 7300), AND 8087 BASED MICROS (E.G. IBM PC AND AT&T 6300).
+C
+ DATA IMACH( 1) / 5 /
+ DATA IMACH( 2) / 6 /
+ DATA IMACH( 3) / 7 /
+ DATA IMACH( 4) / 6 /
+ DATA IMACH( 5) / 32 /
+ DATA IMACH( 6) / 4 /
+ DATA IMACH( 7) / 2 /
+ DATA IMACH( 8) / 31 /
+ DATA IMACH( 9) / 2147483647 /
+ DATA IMACH(10) / 2 /
+ DATA IMACH(11) / 24 /
+ DATA IMACH(12) / -125 /
+ DATA IMACH(13) / 128 /
+ DATA IMACH(14) / 53 /
+ DATA IMACH(15) / -1021 /
+ DATA IMACH(16) / 1024 /
+C
+C MACHINE CONSTANTS FOR AMDAHL MACHINES.
+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) / 2147483647 /
+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 /, SANITY/987/
+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 /, SANITY/987/
+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 /, SANITY/987/
+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 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR FTN4 ON 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) / 47 /
+C DATA IMACH(12) / -929 /
+C DATA IMACH(13) / 1070 /
+C DATA IMACH(14) / 94 /
+C DATA IMACH(15) / -929 /
+C DATA IMACH(16) / 1069 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR FTN5 ON 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) / O"00007777777777777777" /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 47 /
+C DATA IMACH(12) / -929 /
+C DATA IMACH(13) / 1070 /
+C DATA IMACH(14) / 94 /
+C DATA IMACH(15) / -929 /
+C DATA IMACH(16) / 1069 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR CONVEX C-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) / 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) / -128 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 53 /
+C DATA IMACH(15) /-1024 /
+C DATA IMACH(16) / 1023 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 102 /
+C DATA IMACH( 4) / 6 /
+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) / -8189 /
+C DATA IMACH(13) / 8190 /
+C DATA IMACH(14) / 94 /
+C DATA IMACH(15) / -8099 /
+C DATA IMACH(16) / 8190 /, SANITY/987/
+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 /, SANITY/987/
+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 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 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) / 4 /
+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 /, SANITY/987/
+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 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE INTERDATA 8/32
+C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER.
+C
+C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE
+C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 6 /
+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) / Z'7FFFFFFF' /
+C DATA IMACH(10) / 16 /
+C DATA IMACH(11) / 6 /
+C DATA IMACH(12) / -64 /
+C DATA IMACH(13) / 62 /
+C DATA IMACH(14) / 14 /
+C DATA IMACH(15) / -64 /
+C DATA IMACH(16) / 62 /, SANITY/987/
+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) / 7 /
+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 /, SANITY/987/
+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) / 7 /
+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 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING
+C 32-BIT INTEGER ARITHMETIC.
+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) / 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 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING
+C 16-BIT INTEGER ARITHMETIC.
+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) / 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 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE PRIME 50 SERIES SYSTEMS
+C WTIH 32-BIT INTEGERS AND 64V MODE INSTRUCTIONS,
+C SUPPLIED BY IGOR BRAY.
+C
+C DATA IMACH( 1) / 1 /
+C DATA IMACH( 2) / 1 /
+C DATA IMACH( 3) / 2 /
+C DATA IMACH( 4) / 1 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 31 /
+C DATA IMACH( 9) / :17777777777 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 23 /
+C DATA IMACH(12) / -127 /
+C DATA IMACH(13) / +127 /
+C DATA IMACH(14) / 47 /
+C DATA IMACH(15) / -32895 /
+C DATA IMACH(16) / +32637 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000.
+C
+C DATA IMACH( 1) / 0 /
+C DATA IMACH( 2) / 0 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 0 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 1 /
+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) / -125 /
+C DATA IMACH(13) / 128 /
+C DATA IMACH(14) / 53 /
+C DATA IMACH(15) / -1021 /
+C DATA IMACH(16) / 1024 /, SANITY/987/
+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 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR VAX.
+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) / 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 /, SANITY/987/
+C
+C *** ISSUE STOP 775 IF ALL DATA STATEMENTS ARE COMMENTED...
+C IF (SANITY .NE. 987) THEN
+C* *** CHECK FOR AUTODOUBLE ***
+C SMALL(2) = 0
+C RMACH = 1E13
+C IF (SMALL(2) .NE. 0) THEN
+C* *** AUTODOUBLED ***
+C IF ( (SMALL(1) .EQ. 1117925532
+C * .AND. SMALL(2) .EQ. -448790528)
+C * .OR. (SMALL(2) .EQ. 1117925532
+C * .AND. SMALL(1) .EQ. -448790528)) THEN
+C* *** IEEE ***
+C IMACH(10) = 2
+C IMACH(14) = 53
+C IMACH(15) = -1021
+C IMACH(16) = 1024
+C ELSE IF ( SMALL(1) .EQ. -2065213935
+C * .AND. SMALL(2) .EQ. 10752) THEN
+C* *** VAX WITH D_FLOATING ***
+C IMACH(10) = 2
+C IMACH(14) = 56
+C IMACH(15) = -127
+C IMACH(16) = 127
+C ELSE IF ( SMALL(1) .EQ. 1267827943
+C * .AND. SMALL(2) .EQ. 704643072) THEN
+C* *** IBM MAINFRAME ***
+C IMACH(10) = 16
+C IMACH(14) = 14
+C IMACH(15) = -64
+C IMACH(16) = 63
+C ELSE
+C WRITE(*,*)'Adjust autodoubled I1MACH by uncommenting'
+C WRITE(*,*)'data statements appropriate for your machine'
+C WRITE(*,*)'and setting IMACH(I) = IMACH(I+3) for'
+C WRITE(*,*)'I = 11, 12, and 13.'
+C STOP 777
+C END IF
+C IMACH(11) = IMACH(14)
+C IMACH(12) = IMACH(15)
+C IMACH(13) = IMACH(16)
+C ELSE
+C RMACH = 1234567.
+C IF (SMALL(1) .EQ. 1234613304) THEN
+C* *** IEEE ***
+C IMACH(10) = 2
+C IMACH(11) = 24
+C IMACH(12) = -125
+C IMACH(13) = 128
+C IMACH(14) = 53
+C IMACH(15) = -1021
+C IMACH(16) = 1024
+C SANITY = 987
+C ELSE IF (SMALL(1) .EQ. -1271379306) THEN
+C* *** VAX ***
+C IMACH(10) = 2
+C IMACH(11) = 24
+C IMACH(12) = -127
+C IMACH(13) = 127
+C IMACH(14) = 56
+C IMACH(15) = -127
+C IMACH(16) = 127
+C SANITY = 987
+C ELSE IF (SMALL(1) .EQ. 1175639687) THEN
+C* *** IBM ***
+C IMACH(10) = 16
+C IMACH(11) = 6
+C IMACH(12) = -64
+C IMACH(13) = 63
+C IMACH(14) = 14
+C IMACH(15) = -64
+C IMACH(16) = 63
+C SANITY = 987
+C ELSE
+C WRITE(*,*)'Adjust I1MACH by uncommenting'
+C WRITE(*,*)'data statements appropriate for your machine.'
+C STOP 777
+C END IF
+C END IF
+C IMACH( 1) = 5
+C IMACH( 2) = 6
+C IMACH( 3) = 7
+C IMACH( 4) = 6
+C IMACH( 5) = 32
+C IMACH( 6) = 4
+C IMACH( 7) = 2
+C IMACH( 8) = 31
+C IMACH( 9) = 2147483647
+C SANITY = 987
+C END IF
+C IF (I .LT. 1 .OR. I .GT. 16) GO TO 30
+ IF (I .LT. 1 .OR. I .GT. 16) THEN
+ I1MACH = -1
+ RETURN
+ END IF
+C
+ I1MACH = IMACH(I)
+C/6S
+C/7S
+ IF (I .EQ. 6) I1MACH = 1
+C/
+ RETURN
+C
+C 30 WRITE(*,*) 'I1MACH(I): I =',I,' is out of bounds.'
+C
+C* CALL FDUMP
+C
+C STOP
+C
+C* /* C source for I1MACH -- remove the * in column 1 */
+C* /* Note that some values may need changing -- see the comments below. */
+C*#include <stdio.h>
+C*#include <float.h>
+C*#include <limits.h>
+C*#include <math.h>
+C*
+C*long i1mach_(long *i)
+C*{
+C* switch(*i){
+C* case 1: return 5; /* standard input unit -- may need changing */
+C* case 2: return 6; /* standard output unit -- may need changing */
+C* case 3: return 7; /* standard punch unit -- may need changing */
+C* case 4: return 0; /* standard error unit -- may need changing */
+C* case 5: return 32; /* bits per integer -- may need changing */
+C* case 6: return 1; /* Fortran 77 value: 1 character */
+C* /* per character storage unit */
+C* case 7: return 2; /* base for integers -- may need changing */
+C* case 8: return 31; /* digits of integer base -- may need changing */
+C* case 9: return LONG_MAX;
+C* case 10: return FLT_RADIX;
+C* case 11: return FLT_MANT_DIG;
+C* case 12: return FLT_MIN_EXP;
+C* case 13: return FLT_MAX_EXP;
+C* case 14: return DBL_MANT_DIG;
+C* case 15: return DBL_MIN_EXP;
+C* case 16: return DBL_MAX_EXP;
+C* }
+C*
+C* fprintf(stderr, "invalid argument: i1mach(%ld)\n", *i);
+C* exit(1);
+C* return 0; /* for compilers that complain of missing return values */
+C* }
+ END