123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- *DECK I1MACH
- INTEGER FUNCTION I1MACH(I)
- C***BEGIN PROLOGUE I1MACH
- C***DATE WRITTEN 750101 (YYMMDD)
- C***REVISION DATE 890213 (YYMMDD)
- C***CATEGORY NO. R1
- C***KEYWORDS LIBRARY=SLATEC,TYPE=INTEGER(I1MACH-I),MACHINE CONSTANTS
- C***AUTHOR FOX, P. A., (BELL LABS)
- C HALL, A. D., (BELL LABS)
- C SCHRYER, N. L., (BELL LABS)
- C***PURPOSE Returns integer machine dependent constants
- C***DESCRIPTION
- C
- C I1MACH can be used to obtain machine-dependent parameters
- C for the local machine environment. It is a function
- C subroutine with one (input) argument, and can be called
- C as follows, for example
- C
- C K = I1MACH(I)
- C
- C where I=1,...,16. The (output) value of K above is
- C determined by the (input) value of I. The results for
- C various values of I are discussed below.
- C
- C I/O unit numbers.
- C I1MACH( 1) = the standard input unit.
- C I1MACH( 2) = the standard output unit.
- C I1MACH( 3) = the standard punch unit.
- C I1MACH( 4) = the standard error message unit.
- C
- C Words.
- C I1MACH( 5) = the number of bits per integer storage unit.
- C I1MACH( 6) = the number of characters per integer storage unit.
- C
- C Integers.
- 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 I1MACH( 7) = A, the base.
- C I1MACH( 8) = S, the number of base-A digits.
- C I1MACH( 9) = A**S - 1, the largest magnitude.
- C
- C Floating-Point Numbers.
- C Assume floating-point numbers are represented in the T-digit,
- C base-B form
- 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 I1MACH(10) = B, the base.
- C
- C Single-Precision
- C I1MACH(11) = T, the number of base-B digits.
- C I1MACH(12) = EMIN, the smallest exponent E.
- C I1MACH(13) = EMAX, the largest exponent E.
- C
- C Double-Precision
- C I1MACH(14) = T, the number of base-B digits.
- C I1MACH(15) = EMIN, the smallest exponent E.
- 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
- C***REFERENCES FOX P.A., HALL A.D., SCHRYER N.L.,*FRAMEWORK FOR A
- C PORTABLE LIBRARY*, ACM TRANSACTIONS ON MATHEMATICAL
- C SOFTWARE, VOL. 4, NO. 2, JUNE 1978, PP. 177-188.
- C***ROUTINES CALLED (NONE)
- C***END PROLOGUE I1MACH
- C
- INTEGER IMACH(16),OUTPUT
- SAVE IMACH
- EQUIVALENCE (IMACH(4),OUTPUT)
- C
- C MACHINE CONSTANTS FOR THE IBM PC
- C
- DATA IMACH( 1) / 5 /
- DATA IMACH( 2) / 6 /
- DATA IMACH( 3) / 0 /
- DATA IMACH( 4) / 0 /
- 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) / 127 /
- DATA IMACH(14) / 53 /
- DATA IMACH(15) / -1021 /
- DATA IMACH(16) / 1023 /
- C
- C***FIRST EXECUTABLE STATEMENT I1MACH
- IF (I .LT. 1 .OR. I .GT. 16) GO TO 10
- C
- I1MACH = IMACH(I)
- RETURN
- C
- 10 CONTINUE
- WRITE (UNIT = OUTPUT, FMT = 9000)
- 9000 FORMAT ('1ERROR 1 IN I1MACH - I OUT OF BOUNDS')
- C
- C CALL FDUMP
- C
- C
- STOP
- END
|