home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / lang / fortran / 3277 < prev    next >
Encoding:
Internet Message Format  |  1992-08-29  |  7.3 KB

  1. Xref: sparky comp.lang.fortran:3277 comp.unix.cray:254
  2. Newsgroups: comp.lang.fortran,comp.unix.cray
  3. Path: sparky!uunet!cs.utexas.edu!asuvax!ncar!csn!boulder!ucsu!spot.Colorado.EDU!hatay
  4. From: hatay@spot.Colorado.EDU (Ferhat F. Hatay)
  5. Subject: Re: CRAY-YMP single precision machine constants. 
  6. Message-ID: <1992Aug29.180642.2133@ucsu.Colorado.EDU>
  7. Sender: news@ucsu.Colorado.EDU (USENET News System)
  8. Nntp-Posting-Host: spot.colorado.edu
  9. Organization: University of Colorado, Boulder
  10. References: <1992Aug27.160828.18574@tamsun.tamu.edu>
  11. Date: Sat, 29 Aug 1992 18:06:42 GMT
  12. Lines: 230
  13.  
  14. In article <1992Aug27.160828.18574@tamsun.tamu.edu> ssp2537@tamsun.tamu.edu (Satya Srinivas Padavala      ) writes:
  15. >Hi Folks,
  16. >
  17. >     I am wondering if any knowledgeable soul could help me with the following 
  18. >problem. I have been using in my code, BLAS (Basic Linear Algebra Subprograms),
  19. > which are routines called by public domain math packages such as LINPACK, 
  20. >EISPACK etc. I have recently started working on a CRAY-YMP and am need of the 
  21. >following machine constants for single precision for that machine. 
  22. >
  23. > 1) Smallest positive magintude
  24. > 2) Largest positive magnitude
  25. > 3) Smallest relative spacing
  26. > 4) Largest relative spacing
  27. >
  28. > I would appreciate your help if you can point me where I can find these
  29. >values.
  30. >
  31. >Thanks,
  32. >Satya Padavala
  33. >ssp2537@tamsun.tamu.edu 
  34. >
  35.  
  36.  
  37. The following routines are extracted from core library at 
  38. netlib@att.research.com. For more details and original 
  39. files you should send mail to netlib@research.att.com
  40. with the following lines:
  41.  
  42.    send i1mach.f from core
  43.    send r1mach.f from core
  44.  
  45. these files contained the machine constants for a wide 
  46. variety of machines. data is prepared to be used in 
  47. fortran routines, it should be applicable for the 
  48. other compilers as well if some caution is paid. 
  49.  
  50. I include the files below just to let you see if they are
  51. what you really need. 
  52.  
  53.  
  54. Integer constants  
  55.  
  56.       INTEGER FUNCTION I1MACH(I)
  57. C
  58. C  I/O UNIT NUMBERS.
  59. C
  60. C    I1MACH( 1) = THE STANDARD INPUT UNIT.
  61. C
  62. C    I1MACH( 2) = THE STANDARD OUTPUT UNIT.
  63. C
  64. C    I1MACH( 3) = THE STANDARD PUNCH UNIT.
  65. C
  66. C    I1MACH( 4) = THE STANDARD ERROR MESSAGE UNIT.
  67. C
  68. C  WORDS.
  69. C
  70. C    I1MACH( 5) = THE NUMBER OF BITS PER INTEGER STORAGE UNIT.
  71. C
  72. C    I1MACH( 6) = THE NUMBER OF CHARACTERS PER CHARACTER STORAGE UNIT.
  73. C                 FOR FORTRAN 77, THIS IS ALWAYS 1.  FOR FORTRAN 66,
  74. C                 CHARACTER STORAGE UNIT = INTEGER STORAGE UNIT.
  75. C
  76. C  INTEGERS.
  77. C
  78. C    ASSUME INTEGERS ARE REPRESENTED IN THE S-DIGIT, BASE-A FORM
  79. C
  80. C               SIGN ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) )
  81. C
  82. C               WHERE 0 .LE. X(I) .LT. A FOR I=0,...,S-1.
  83. C
  84. C    I1MACH( 7) = A, THE BASE.
  85. C
  86. C    I1MACH( 8) = S, THE NUMBER OF BASE-A DIGITS.
  87. C
  88. C    I1MACH( 9) = A**S - 1, THE LARGEST MAGNITUDE.
  89. C
  90. C  FLOATING-POINT NUMBERS.
  91. C
  92. C    ASSUME FLOATING-POINT NUMBERS ARE REPRESENTED IN THE T-DIGIT,
  93. C    BASE-B FORM
  94. C
  95. C               SIGN (B**E)*( (X(1)/B) + ... + (X(T)/B**T) )
  96. C
  97. C               WHERE 0 .LE. X(I) .LT. B FOR I=1,...,T,
  98. C               0 .LT. X(1), AND EMIN .LE. E .LE. EMAX.
  99. C
  100. C    I1MACH(10) = B, THE BASE.
  101. C
  102. C  SINGLE-PRECISION
  103. C
  104. C    I1MACH(11) = T, THE NUMBER OF BASE-B DIGITS.
  105. C
  106. C    I1MACH(12) = EMIN, THE SMALLEST EXPONENT E.
  107. C
  108. C    I1MACH(13) = EMAX, THE LARGEST EXPONENT E.
  109. C
  110. C  DOUBLE-PRECISION
  111. C
  112. C    I1MACH(14) = T, THE NUMBER OF BASE-B DIGITS.
  113. C
  114. C    I1MACH(15) = EMIN, THE SMALLEST EXPONENT E.
  115. C
  116. C    I1MACH(16) = EMAX, THE LARGEST EXPONENT E.
  117. C
  118. C  TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT,
  119. C  THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY
  120. C  REMOVING THE C FROM COLUMN 1.  ALSO, THE VALUES OF
  121. C  I1MACH(1) - I1MACH(4) SHOULD BE CHECKED FOR CONSISTENCY
  122. C  WITH THE LOCAL OPERATING SYSTEM.  FOR FORTRAN 77, YOU MAY WISH
  123. C  TO ADJUST THE DATA STATEMENT SO IMACH(6) IS SET TO 1, AND
  124. C  THEN TO COMMENT OUT THE EXECUTABLE TEST ON I .EQ. 6 BELOW.
  125. C
  126. C  FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), THE FIRST
  127. C  SET OF CONSTANTS BELOW SHOULD BE APPROPRIATE, EXCEPT PERHAPS
  128. C  FOR IMACH(1) - IMACH(4).
  129. C
  130. C  COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *)
  131. C  GIVE C SOURCE FOR I1MACH.
  132. C
  133.       INTEGER IMACH(16),OUTPUT,SANITY
  134. C
  135.       EQUIVALENCE (IMACH(4),OUTPUT)
  136. C
  137. C
  138. C     MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3.
  139. C
  140.        DATA IMACH( 1) /     5 /
  141.        DATA IMACH( 2) /     6 /
  142.        DATA IMACH( 3) /   102 /
  143.        DATA IMACH( 4) /     6 /
  144.        DATA IMACH( 5) /    64 /
  145.        DATA IMACH( 6) /     8 /
  146.        DATA IMACH( 7) /     2 /
  147.        DATA IMACH( 8) /    63 /
  148.        DATA IMACH( 9) /  777777777777777777777B /
  149.        DATA IMACH(10) /     2 /
  150.        DATA IMACH(11) /    47 /
  151.        DATA IMACH(12) / -8189 /
  152.        DATA IMACH(13) /  8190 /
  153.        DATA IMACH(14) /    94 /
  154.        DATA IMACH(15) / -8099 /
  155.        DATA IMACH(16) /  8190 /, SANITY/987/
  156.  
  157. C  ***  ISSUE STOP 777 IF ALL DATA STATEMENTS ARE COMMENTED...
  158.       IF (SANITY .NE. 987) STOP 777
  159.       IF (I .LT. 1  .OR.  I .GT. 16) GO TO 10
  160. C
  161.       I1MACH = IMACH(I)
  162. C/6S
  163. C/7S
  164.       IF(I.EQ.6) I1MACH=1
  165. C/
  166.       RETURN
  167.    10 WRITE(OUTPUT,1999) I
  168.  1999 FORMAT(' I1MACH - I OUT OF BOUNDS',I10)
  169.       STOP
  170.       END
  171.  
  172.  
  173. float constants 
  174.  
  175.       REAL FUNCTION R1MACH(I)
  176. C
  177. C  SINGLE-PRECISION MACHINE CONSTANTS
  178. C
  179. C  R1MACH(1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE.
  180. C
  181. C  R1MACH(2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE.
  182. C
  183. C  R1MACH(3) = B**(-T), THE SMALLEST RELATIVE SPACING.
  184. C
  185. C  R1MACH(4) = B**(1-T), THE LARGEST RELATIVE SPACING.
  186. C
  187. C  R1MACH(5) = LOG10(B)
  188. C
  189. C  TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT,
  190. C  THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY
  191. C  REMOVING THE C FROM COLUMN 1.
  192. C
  193. C  FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), THE FIRST
  194. C  SET OF CONSTANTS BELOW SHOULD BE APPROPRIATE.
  195. C
  196. C  WHERE POSSIBLE, DECIMAL, OCTAL OR HEXADECIMAL CONSTANTS ARE USED
  197. C  TO SPECIFY THE CONSTANTS EXACTLY.  SOMETIMES THIS REQUIRES USING
  198. C  EQUIVALENT INTEGER ARRAYS.  IF YOUR COMPILER USES HALF-WORD
  199. C  INTEGERS BY DEFAULT (SOMETIMES CALLED INTEGER*2), YOU MAY NEED TO
  200. C  CHANGE INTEGER TO INTEGER*4 OR OTHERWISE INSTRUCT YOUR COMPILER
  201. C  TO USE FULL-WORD INTEGERS IN THE NEXT 5 DECLARATIONS.
  202. C
  203. C  COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *)
  204. C  GIVE C SOURCE FOR R1MACH.
  205. C
  206.       INTEGER SMALL(2)
  207.       INTEGER LARGE(2)
  208.       INTEGER RIGHT(2)
  209.       INTEGER DIVER(2)
  210.       INTEGER LOG10(2)
  211.       INTEGER SC
  212. C
  213.       REAL RMACH(5)
  214. C
  215.       EQUIVALENCE (RMACH(1),SMALL(1))
  216.       EQUIVALENCE (RMACH(2),LARGE(1))
  217.       EQUIVALENCE (RMACH(3),RIGHT(1))
  218.       EQUIVALENCE (RMACH(4),DIVER(1))
  219.       EQUIVALENCE (RMACH(5),LOG10(1))
  220. C
  221. C     MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3.
  222. C
  223. C      DATA RMACH(1) / 200034000000000000000B /
  224. C      DATA RMACH(2) / 577767777777777777776B /
  225. C      DATA RMACH(3) / 377224000000000000000B /
  226. C      DATA RMACH(4) / 377234000000000000000B /
  227. C      DATA RMACH(5) / 377774642023241175720B /, SC/987/
  228. C
  229. C  ***  ISSUE STOP 778 IF ALL DATA STATEMENTS ARE COMMENTED...
  230.       IF (SC .NE. 987) STOP 778
  231.       IF (I .LT. 1  .OR.  I .GT. 5) GOTO 999
  232.       R1MACH = RMACH(I)
  233.       RETURN
  234.   999 WRITE(*,1999) I
  235.  1999 FORMAT(' R1MACH - I OUT OF BOUNDS',I10)
  236.       STOP
  237.       END
  238.  
  239. -- 
  240. Ferhat F. Hatay                        || Disclamer: |||||||||||||||||
  241. Aerospace Engineering Sciences         || I speak for myself unless || 
  242. University of Colorado, Boulder        || otherwise indicated.      ||
  243. e-mail: hatay@spot.colorado.edu        |||||||||||||||||||||||||||||||
  244.