home *** CD-ROM | disk | FTP | other *** search
- Xref: sparky comp.lang.fortran:3277 comp.unix.cray:254
- Newsgroups: comp.lang.fortran,comp.unix.cray
- Path: sparky!uunet!cs.utexas.edu!asuvax!ncar!csn!boulder!ucsu!spot.Colorado.EDU!hatay
- From: hatay@spot.Colorado.EDU (Ferhat F. Hatay)
- Subject: Re: CRAY-YMP single precision machine constants.
- Message-ID: <1992Aug29.180642.2133@ucsu.Colorado.EDU>
- Sender: news@ucsu.Colorado.EDU (USENET News System)
- Nntp-Posting-Host: spot.colorado.edu
- Organization: University of Colorado, Boulder
- References: <1992Aug27.160828.18574@tamsun.tamu.edu>
- Date: Sat, 29 Aug 1992 18:06:42 GMT
- Lines: 230
-
- In article <1992Aug27.160828.18574@tamsun.tamu.edu> ssp2537@tamsun.tamu.edu (Satya Srinivas Padavala ) writes:
- >Hi Folks,
- >
- > I am wondering if any knowledgeable soul could help me with the following
- >problem. I have been using in my code, BLAS (Basic Linear Algebra Subprograms),
- > which are routines called by public domain math packages such as LINPACK,
- >EISPACK etc. I have recently started working on a CRAY-YMP and am need of the
- >following machine constants for single precision for that machine.
- >
- > 1) Smallest positive magintude
- > 2) Largest positive magnitude
- > 3) Smallest relative spacing
- > 4) Largest relative spacing
- >
- > I would appreciate your help if you can point me where I can find these
- >values.
- >
- >Thanks,
- >Satya Padavala
- >ssp2537@tamsun.tamu.edu
- >
-
-
- The following routines are extracted from core library at
- netlib@att.research.com. For more details and original
- files you should send mail to netlib@research.att.com
- with the following lines:
-
- send i1mach.f from core
- send r1mach.f from core
-
- these files contained the machine constants for a wide
- variety of machines. data is prepared to be used in
- fortran routines, it should be applicable for the
- other compilers as well if some caution is paid.
-
- I include the files below just to let you see if they are
- what you really need.
-
-
- Integer constants
-
- 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,SANITY
- C
- EQUIVALENCE (IMACH(4),OUTPUT)
- C
- C
- C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3.
- C
- DATA IMACH( 1) / 5 /
- DATA IMACH( 2) / 6 /
- DATA IMACH( 3) / 102 /
- DATA IMACH( 4) / 6 /
- DATA IMACH( 5) / 64 /
- DATA IMACH( 6) / 8 /
- DATA IMACH( 7) / 2 /
- DATA IMACH( 8) / 63 /
- DATA IMACH( 9) / 777777777777777777777B /
- DATA IMACH(10) / 2 /
- DATA IMACH(11) / 47 /
- DATA IMACH(12) / -8189 /
- DATA IMACH(13) / 8190 /
- DATA IMACH(14) / 94 /
- DATA IMACH(15) / -8099 /
- DATA IMACH(16) / 8190 /, SANITY/987/
-
- C *** ISSUE STOP 777 IF ALL DATA STATEMENTS ARE COMMENTED...
- IF (SANITY .NE. 987) STOP 777
- IF (I .LT. 1 .OR. I .GT. 16) GO TO 10
- C
- I1MACH = IMACH(I)
- C/6S
- C/7S
- IF(I.EQ.6) I1MACH=1
- C/
- RETURN
- 10 WRITE(OUTPUT,1999) I
- 1999 FORMAT(' I1MACH - I OUT OF BOUNDS',I10)
- STOP
- END
-
-
- float constants
-
- REAL FUNCTION R1MACH(I)
- C
- C SINGLE-PRECISION MACHINE CONSTANTS
- C
- C R1MACH(1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE.
- C
- C R1MACH(2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE.
- C
- C R1MACH(3) = B**(-T), THE SMALLEST RELATIVE SPACING.
- C
- C R1MACH(4) = B**(1-T), THE LARGEST RELATIVE SPACING.
- C
- C R1MACH(5) = LOG10(B)
- 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.
- C
- C FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), THE FIRST
- C SET OF CONSTANTS BELOW SHOULD BE APPROPRIATE.
- C
- C WHERE POSSIBLE, DECIMAL, OCTAL OR HEXADECIMAL CONSTANTS ARE USED
- C TO SPECIFY THE CONSTANTS EXACTLY. SOMETIMES THIS REQUIRES USING
- C EQUIVALENT INTEGER ARRAYS. IF YOUR COMPILER USES HALF-WORD
- C INTEGERS BY DEFAULT (SOMETIMES CALLED INTEGER*2), YOU MAY NEED TO
- C CHANGE INTEGER TO INTEGER*4 OR OTHERWISE INSTRUCT YOUR COMPILER
- C TO USE FULL-WORD INTEGERS IN THE NEXT 5 DECLARATIONS.
- C
- C COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *)
- C GIVE C SOURCE FOR R1MACH.
- C
- INTEGER SMALL(2)
- INTEGER LARGE(2)
- INTEGER RIGHT(2)
- INTEGER DIVER(2)
- INTEGER LOG10(2)
- INTEGER SC
- C
- REAL RMACH(5)
- C
- EQUIVALENCE (RMACH(1),SMALL(1))
- EQUIVALENCE (RMACH(2),LARGE(1))
- EQUIVALENCE (RMACH(3),RIGHT(1))
- EQUIVALENCE (RMACH(4),DIVER(1))
- EQUIVALENCE (RMACH(5),LOG10(1))
- C
- C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3.
- C
- C DATA RMACH(1) / 200034000000000000000B /
- C DATA RMACH(2) / 577767777777777777776B /
- C DATA RMACH(3) / 377224000000000000000B /
- C DATA RMACH(4) / 377234000000000000000B /
- C DATA RMACH(5) / 377774642023241175720B /, SC/987/
- C
- C *** ISSUE STOP 778 IF ALL DATA STATEMENTS ARE COMMENTED...
- IF (SC .NE. 987) STOP 778
- IF (I .LT. 1 .OR. I .GT. 5) GOTO 999
- R1MACH = RMACH(I)
- RETURN
- 999 WRITE(*,1999) I
- 1999 FORMAT(' R1MACH - I OUT OF BOUNDS',I10)
- STOP
- END
-
- --
- Ferhat F. Hatay || Disclamer: |||||||||||||||||
- Aerospace Engineering Sciences || I speak for myself unless ||
- University of Colorado, Boulder || otherwise indicated. ||
- e-mail: hatay@spot.colorado.edu |||||||||||||||||||||||||||||||
-