1 REAL FUNCTION R1MACH(I) 2C***BEGIN PROLOGUE R1MACH 3C***DATE WRITTEN 790101 (YYMMDD) 4C***REVISION DATE 860825 (YYMMDD) 5C***CATEGORY NO. R1 6C***KEYWORDS MACHINE CONSTANTS 7C***AUTHOR FOX, P. A., (BELL LABS) 8C HALL, A. D., (BELL LABS) 9C SCHRYER, N. L., (BELL LABS) 10C***PURPOSE Returns single precision machine dependent constants 11C***DESCRIPTION 12C 13C This is the CMLIB version of R1MACH, the real machine 14C constants subroutine originally developed for the PORT library. 15C 16C R1MACH can be used to obtain machine-dependent parameters 17C for the local machine environment. It is a function 18C subroutine with one (input) argument, and can be called 19C as follows, for example 20C 21C A = R1MACH(I) 22C 23C where I=1,...,5. The (output) value of A above is 24C determined by the (input) value of I. The results for 25C various values of I are discussed below. 26C 27C Single-Precision Machine Constants 28C R1MACH(1) = B**(EMIN-1), the smallest positive magnitude. 29C R1MACH(2) = B**EMAX*(1 - B**(-T)), the largest magnitude. 30C R1MACH(3) = B**(-T), the smallest relative spacing. 31C R1MACH(4) = B**(1-T), the largest relative spacing. 32C R1MACH(5) = LOG10(B) 33C***REFERENCES FOX, P.A., HALL, A.D., SCHRYER, N.L, *FRAMEWORK FOR 34C A PORTABLE LIBRARY*, ACM TRANSACTIONS ON MATHE- 35C MATICAL SOFTWARE, VOL. 4, NO. 2, JUNE 1978, 36C PP. 177-188. 37C***ROUTINES CALLED XERROR 38C***END PROLOGUE R1MACH 39C 40 INTEGER SMALL(2) 41 INTEGER LARGE(2) 42 INTEGER RIGHT(2) 43 INTEGER DIVER(2) 44 INTEGER LOG10(2) 45C 46 REAL RMACH(5) 47C 48 EQUIVALENCE (RMACH(1),SMALL(1)) 49 EQUIVALENCE (RMACH(2),LARGE(1)) 50 EQUIVALENCE (RMACH(3),RIGHT(1)) 51 EQUIVALENCE (RMACH(4),DIVER(1)) 52 EQUIVALENCE (RMACH(5),LOG10(1)) 53C 54C 55C MACHINE CONSTANTS FOR IEEE ARITHMETIC MACHINES, SUCH AS THE AT&T 56C 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. SUN 3 AND AT&T 57C PC 7300), SUN SPARCSTATIONS, SILICON GRAPHCS WORKSTATIONS, HP 58C 9000 WORKSTATIONS, IBM RS/6000 WORKSTATIONS, AND 8087 BASED 59C MICROS (E.G. IBM PC AND AT&T 6300). 60C 61C === MACHINE = ATT.3B 62C === MACHINE = ATT.6300 63C === MACHINE = ATT.7300 64C === MACHINE = HP.9000 65C === MACHINE = IBM.PC 66C === MACHINE = IBM.RS6000 67C === MACHINE = IEEE.MOST-SIG-BYTE-FIRST 68C === MACHINE = IEEE.LEAST-SIG-BYTE-FIRST 69C === MACHINE = SGI 70C === MACHINE = SUN 71C === MACHINE = 68000 72C === MACHINE = 8087 73C DATA SMALL(1) / 8388608 / 74C DATA LARGE(1) / 2139095039 / 75C DATA RIGHT(1) / 864026624 / 76C DATA DIVER(1) / 872415232 / 77C DATA LOG10(1) / 1050288283 / 78C 79C MACHINE CONSTANTS FOR SUN WORKSTATIONS. f77 WITH -r8 OPTION. 80C MACHINE CONSTANTS FOR IBM RS/6000 WORKSTATIONS WITH -qautodbl=dblpad. 81C 82C === MACHINE = IBM.RS6000.XLF-WITH-AUTODBL-OPTION 83C === MACHINE = SUN.F77-WITH-R8-OPTION 84C === MACHINE = SGI.ORIGIN.F77-WITH-R8-D16-OPTIONS 85C DATA RMACH(1) / 2.2250738585072E-307 / 86C DATA RMACH(2) / 1.7976931348623E308 / 87C DATA RMACH(3) / 1.1102230246252E-16 / 88C DATA RMACH(4) / 2.2204460492503E-16 / 89C DATA RMACH(5) / 0.30102999566398 / 90C 91C MACHINE CONSTANTS FOR AMDAHL MACHINES. 92C 93C === MACHINE = AMDAHL 94C DATA SMALL(1) / 1048576 / 95C DATA LARGE(1) / 2147483647 / 96C DATA RIGHT(1) / 990904320 / 97C DATA DIVER(1) / 1007681536 / 98C DATA LOG10(1) / 1091781651 / 99C 100C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. 101C 102C === MACHINE = BURROUGHS.1700 103C DATA RMACH(1) / Z400800000 / 104C DATA RMACH(2) / Z5FFFFFFFF / 105C DATA RMACH(3) / Z4E9800000 / 106C DATA RMACH(4) / Z4EA800000 / 107C DATA RMACH(5) / Z500E730E8 / 108C 109C MACHINE CONSTANTS FOR THE BURROUGHS 5700/6700/7700 SYSTEMS. 110C 111C === MACHINE = BURROUGHS.5700 112C === MACHINE = BURROUGHS.6700 113C === MACHINE = BURROUGHS.7700 114C DATA RMACH(1) / O1771000000000000 / 115C DATA RMACH(2) / O0777777777777777 / 116C DATA RMACH(3) / O1311000000000000 / 117C DATA RMACH(4) / O1301000000000000 / 118C DATA RMACH(5) / O1157163034761675 / 119C 120C MACHINE CONSTANTS FOR THE CONVEX C1, C2, C3 SERIES (NATIVE MODE) 121C 122C === MACHINE = CONVEX 123C DATA RMACH(1) / 2.9387360E-39 / 124C DATA RMACH(2) / 1.7014117E+38 / 125C DATA RMACH(3) / 5.9604645E-08 / 126C DATA RMACH(4) / 1.1920929E-07 / 127C DATA RMACH(5) / 3.0102999E-01 / 128C 129C MACHINE CONSTANTS FOR THE CONVEX C1, C2, C3 (NATIVE MODE) 130C WITH -P8 OPTION 131C 132C === MACHINE = CONVEX.P8 133C DATA RMACH(1) / 5.562684646268007E-309 / 134C DATA RMACH(2) / 8.988465674311577E+307 / 135C DATA RMACH(3) / 1.110223024625157E-016 / 136C DATA RMACH(4) / 2.220446049250313E-016 / 137C DATA RMACH(5) / 3.010299956639812E-001 / 138C 139C MACHINE CONSTANTS FOR THE CONVEX C1, C2, C3 (IEEE MODE) 140C 141C === MACHINE = CONVEX.IEEE 142C DATA RMACH(1) / 1.1754945E-38 / 143C DATA RMACH(2) / 3.4028234E+38 / 144C DATA RMACH(3) / 5.9604645E-08 / 145C DATA RMACH(4) / 1.1920929E-07 / 146C DATA RMACH(5) / 3.0102999E-01 / 147C 148C MACHINE CONSTANTS FOR THE CONVEX C1, C2, C3 (IEEE MODE) 149C WITH -P8 OPTION 150C 151C === MACHINE = CONVEX.IEEE.P8 152C DATA RMACH(1) / 2.225073858507202E-308 / 153C DATA RMACH(2) / 1.797693134862315E+308 / 154C DATA RMACH(3) / 1.110223024625157E-016 / 155C DATA RMACH(4) / 2.220446049250313E-016 / 156C DATA RMACH(5) / 3.010299956639812E-001 / 157C 158C MACHINE CONSTANTS FOR THE CYBER 170/180 SERIES USING NOS (FTN5). 159C 160C === MACHINE = CYBER.170.NOS 161C === MACHINE = CYBER.180.NOS 162C DATA RMACH(1) / O"00014000000000000000" / 163C DATA RMACH(2) / O"37767777777777777777" / 164C DATA RMACH(3) / O"16404000000000000000" / 165C DATA RMACH(4) / O"16414000000000000000" / 166C DATA RMACH(5) / O"17164642023241175720" / 167C 168C MACHINE CONSTANTS FOR THE CDC 180 SERIES USING NOS/VE 169C 170C === MACHINE = CYBER.180.NOS/VE 171C DATA RMACH(1) / Z"3001800000000000" / 172C DATA RMACH(2) / Z"4FFEFFFFFFFFFFFE" / 173C DATA RMACH(3) / Z"3FD2800000000000" / 174C DATA RMACH(4) / Z"3FD3800000000000" / 175C DATA RMACH(5) / Z"3FFF9A209A84FBCF" / 176C 177C MACHINE CONSTANTS FOR THE CYBER 205 178C 179C === MACHINE = CYBER.205 180C DATA RMACH(1) / X'9000400000000000' / 181C DATA RMACH(2) / X'6FFF7FFFFFFFFFFF' / 182C DATA RMACH(3) / X'FFA3400000000000' / 183C DATA RMACH(4) / X'FFA4400000000000' / 184C DATA RMACH(5) / X'FFD04D104D427DE8' / 185C 186C MACHINE CONSTANTS FOR THE CDC 6000/7000 SERIES. 187C 188C === MACHINE = CDC.6000 189C === MACHINE = CDC.7000 190C DATA RMACH(1) / 00014000000000000000B / 191C DATA RMACH(2) / 37767777777777777777B / 192C DATA RMACH(3) / 16404000000000000000B / 193C DATA RMACH(4) / 16414000000000000000B / 194C DATA RMACH(5) / 17164642023241175720B / 195C 196C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3. 197C 198C === MACHINE = CRAY.46-BIT-INTEGER 199C === MACHINE = CRAY.64-BIT-INTEGER 200C DATA RMACH(1) / 200034000000000000000B / 201C DATA RMACH(2) / 577767777777777777776B / 202C DATA RMACH(3) / 377224000000000000000B / 203C DATA RMACH(4) / 377234000000000000000B / 204C DATA RMACH(5) / 377774642023241175720B / 205C 206C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200 207C 208C NOTE - IT MAY BE APPROPRIATE TO INCLUDE THE FOLLOWING LINE - 209C STATIC RMACH(5) 210C 211C === MACHINE = DATA_GENERAL.ECLIPSE.S/200 212C DATA SMALL/20K,0/,LARGE/77777K,177777K/ 213C DATA RIGHT/35420K,0/,DIVER/36020K,0/ 214C DATA LOG10/40423K,42023K/ 215C 216C ELXSI 6400 217C 218C === MACHINE = ELSXI.6400 219C DATA SMALL(1) / '00800000'X / 220C DATA LARGE(1) / '7F7FFFFF'X / 221C DATA RIGHT(1) / '33800000'X / 222C DATA DIVER(1) / '34000000'X / 223C DATA LOG10(1) / '3E9A209B'X / 224C 225C MACHINE CONSTANTS FOR THE HARRIS 220 226C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7 227C 228C === MACHINE = HARRIS.220 229C === MACHINE = HARRIS.SLASH6 230C === MACHINE = HARRIS.SLASH7 231C DATA SMALL(1),SMALL(2) / '20000000, '00000201 / 232C DATA LARGE(1),LARGE(2) / '37777777, '00000177 / 233C DATA RIGHT(1),RIGHT(2) / '20000000, '00000352 / 234C DATA DIVER(1),DIVER(2) / '20000000, '00000353 / 235C DATA LOG10(1),LOG10(2) / '23210115, '00000377 / 236C 237C MACHINE CONSTANTS FOR THE HONEYWELL 600/6000 SERIES. 238C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. 239C 240C === MACHINE = HONEYWELL.600/6000 241C === MACHINE = HONEYWELL.DPS.8/70 242C DATA RMACH(1) / O402400000000 / 243C DATA RMACH(2) / O376777777777 / 244C DATA RMACH(3) / O714400000000 / 245C DATA RMACH(4) / O716400000000 / 246C DATA RMACH(5) / O776464202324 / 247C 248C MACHINE CONSTANTS FOR THE HP 2100 249C 3 WORD DOUBLE PRECISION WITH FTN4 250C 251C === MACHINE = HP.2100.3_WORD_DP 252C DATA SMALL(1), SMALL(2) / 40000B, 1 / 253C DATA LARGE(1), LARGE(2) / 77777B, 177776B / 254C DATA RIGHT(1), RIGHT(2) / 40000B, 325B / 255C DATA DIVER(1), DIVER(2) / 40000B, 327B / 256C DATA LOG10(1), LOG10(2) / 46420B, 46777B / 257C 258C MACHINE CONSTANTS FOR THE HP 2100 259C 4 WORD DOUBLE PRECISION WITH FTN4 260C 261C === MACHINE = HP.2100.4_WORD_DP 262C DATA SMALL(1), SMALL(2) / 40000B, 1 / 263C DATA LARGE91), LARGE(2) / 77777B, 177776B / 264C DATA RIGHT(1), RIGHT(2) / 40000B, 325B / 265C DATA DIVER(1), DIVER(2) / 40000B, 327B / 266C DATA LOG10(1), LOG10(2) / 46420B, 46777B / 267C 268C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES, 269C THE XEROX SIGMA 5/7/9, THE SEL SYSTEMS 85/86 AND 270C THE INTERDATA 3230 AND INTERDATA 7/32. 271C 272C === MACHINE = IBM.360 273C === MACHINE = IBM.370 274C === MACHINE = XEROX.SIGMA.5 275C === MACHINE = XEROX.SIGMA.7 276C === MACHINE = XEROX.SIGMA.9 277C === MACHINE = SEL.85 278C === MACHINE = SEL.86 279C === MACHINE = INTERDATA.3230 280C === MACHINE = INTERDATA.7/32 281C DATA RMACH(1) / Z00100000 / 282C DATA RMACH(2) / Z7FFFFFFF / 283C DATA RMACH(3) / Z3B100000 / 284C DATA RMACH(4) / Z3C100000 / 285C DATA RMACH(5) / Z41134413 / 286C 287C MACHINE CONSTANTS FOR THE INTERDATA 8/32 288C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER. 289C 290C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE 291C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S. 292C 293C === MACHINE = INTERDATA.8/32.UNIX 294C DATA RMACH(1) / Z'00100000' / 295C DATA RMACH(2) / Z'7EFFFFFF' / 296C DATA RMACH(3) / Z'3B100000' / 297C DATA RMACH(4) / Z'3C100000' / 298C DATA RMACH(5) / Z'41134413' / 299C 300C MACHINE CONSTANTS FOR THE PDP-10 (KA OR KI PROCESSOR). 301C 302C === MACHINE = PDP-10.KA 303C === MACHINE = PDP-10.KI 304C DATA RMACH(1) / "000400000000 / 305C DATA RMACH(2) / "377777777777 / 306C DATA RMACH(3) / "146400000000 / 307C DATA RMACH(4) / "147400000000 / 308C DATA RMACH(5) / "177464202324 / 309C 310C MACHINE CONSTANTS FOR PDP-11 FORTRAN SUPPORTING 311C 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). 312C 313C === MACHINE = PDP-11.32-BIT 314C DATA SMALL(1) / 8388608 / 315C DATA LARGE(1) / 2147483647 / 316C DATA RIGHT(1) / 880803840 / 317C DATA DIVER(1) / 889192448 / 318C DATA LOG10(1) / 1067065499 / 319C 320C DATA RMACH(1) / O00040000000 / 321C DATA RMACH(2) / O17777777777 / 322C DATA RMACH(3) / O06440000000 / 323C DATA RMACH(4) / O06500000000 / 324C DATA RMACH(5) / O07746420233 / 325C 326C MACHINE CONSTANTS FOR PDP-11 FORTRAN SUPPORTING 327C 16-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). 328C 329C === MACHINE = PDP-11.16-BIT 330C DATA SMALL(1),SMALL(2) / 128, 0 / 331C DATA LARGE(1),LARGE(2) / 32767, -1 / 332C DATA RIGHT(1),RIGHT(2) / 13440, 0 / 333C DATA DIVER(1),DIVER(2) / 13568, 0 / 334C DATA LOG10(1),LOG10(2) / 16282, 8347 / 335C 336C DATA SMALL(1),SMALL(2) / O000200, O000000 / 337C DATA LARGE(1),LARGE(2) / O077777, O177777 / 338C DATA RIGHT(1),RIGHT(2) / O032200, O000000 / 339C DATA DIVER(1),DIVER(2) / O032400, O000000 / 340C DATA LOG10(1),LOG10(2) / O037632, O020233 / 341C 342C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000. 343C 344C === MACHINE = SEQUENT.BALANCE.8000 345C DATA SMALL(1) / $00800000 / 346C DATA LARGE(1) / $7F7FFFFF / 347C DATA RIGHT(1) / $33800000 / 348C DATA DIVER(1) / $34000000 / 349C DATA LOG10(1) / $3E9A209B / 350C 351C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. 352C 353C === MACHINE = UNIVAC.1100 354C DATA RMACH(1) / O000400000000 / 355C DATA RMACH(2) / O377777777777 / 356C DATA RMACH(3) / O146400000000 / 357C DATA RMACH(4) / O147400000000 / 358C DATA RMACH(5) / O177464202324 / 359C 360C MACHINE CONSTANTS FOR THE VAX 11/780 361C (EXPRESSED IN INTEGER AND HEXADECIMAL) 362C *** THE INTEGER FORMAT SHOULD BE OK FOR UNIX SYSTEMS*** 363C 364C === MACHINE = VAX.11/780 365C DATA SMALL(1) / 128 / 366C DATA LARGE(1) / -32769 / 367C DATA RIGHT(1) / 13440 / 368C DATA DIVER(1) / 13568 / 369C DATA LOG10(1) / 547045274 / 370C 371C ***THE HEX FORMAT BELOW MAY NOT BE SUITABLE FOR UNIX SYSTEMS*** 372C 373C DATA SMALL(1) / Z00000080 / 374C DATA LARGE(1) / ZFFFF7FFF / 375C DATA RIGHT(1) / Z00003480 / 376C DATA DIVER(1) / Z00003500 / 377C DATA LOG10(1) / Z209B3F9A / 378C 379C 380C***FIRST EXECUTABLE STATEMENT R1MACH 381C 382 R1MACH = RMACH(I) 383 RETURN 384C 385 END 386