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 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. c integer imach(16),output c equivalence (imach(4),output) 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 / 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 / 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 / c c machine constants for 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) / 48 / c data imach(12) / -974 / c data imach(13) / 1070 / c data imach(14) / 96 / c data imach(15) / -927 / c data imach(16) / 1070 / c c machine constants for the cray 1 c c data imach( 1) / 100 / c data imach( 2) / 101 / c data imach( 3) / 102 / c data imach( 4) / 101 / 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) / 48 / c data imach(12) / -8192 / c data imach(13) / 8191 / c data imach(14) / 96 / c data imach(15) / -8192 / c data imach(16) / 8191 / 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 / c c machine constants for the harris 220 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 / c c machine constants for the honeywell 600/6000 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) / 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) / -127 / c data imach(13) / 127 / c data imach(14) / 63 / c data imach(15) / -127 / c data imach(16) / 127 / 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 / 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) / 5 / 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 / 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) / 5 / 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 / c c machine constants for pdp-11 (and vax-11) fortran's supporting c 32-bit integer arithmetic. 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) / -127 / data imach(13) / 127 / data imach(14) / 56 / data imach(15) / -127 / data imach(16) / 127 / c c machine constants for pdp-11 fortran's supporting c 16-bit integer arithmetic. c c data imach( 1) / 5 / c data imach( 2) / 6 / c data imach( 3) / 5 / 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 / 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 / c if (i .lt. 1 .or. i .gt. 16) go to 10 c i1mach=imach(i) return c 10 write(output,9000) 9000 format(39h1error 1 in i1mach - i out of bounds) c call fdump c stop c end 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 where possible, octal or hexadecimal constants have been used c to specify the constants exactly which has in some cases c required the use of equivalent integer arrays. c integer small(2) integer large(2) integer right(2) integer diver(2) integer log10(2) 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 burroughs 1700 system. c c data rmach(1) / z400800000 / c data rmach(2) / z5ffffffff / c data rmach(3) / z4e9800000 / c data rmach(4) / z4ea800000 / c data rmach(5) / z500e730e8 / c c machine constants for the burroughs 5700/6700/7700 systems. c c data rmach(1) / o1771000000000000 / c data rmach(2) / o0777777777777777 / c data rmach(3) / o1311000000000000 / c data rmach(4) / o1301000000000000 / c data rmach(5) / o1157163034761675 / c c machine constants for the cdc 6000/7000 series. c c data rmach(1) / 00014000000000000000b / c data rmach(2) / 37767777777777777777b / c data rmach(3) / 16404000000000000000b / c data rmach(4) / 16414000000000000000b / c data rmach(5) / 17164642023241175720b / c c machine constants for the cray 1 c c data rmach(1) / 200004000000000000000b / c data rmach(2) / 577777777777777777777b / c data rmach(3) / 377214000000000000000b / c data rmach(4) / 377224000000000000000b / c data rmach(5) / 377774642023241175720b / c c machine constants for the data general eclipse s/200 c c note - it may be appropriate to include the following card - c static rmach(5) c c data small/20k,0/,large/77777k,177777k/ c data right/35420k,0/,diver/36020k,0/ c data log10/40423k,42023k/ c c machine constants for the harris 220 c c data small(1),small(2) / '20000000, '00000201 / c data large(1),large(2) / '37777777, '00000177 / c data right(1),right(2) / '20000000, '00000352 / c data diver(1),diver(2) / '20000000, '00000353 / c data log10(1),log10(2) / '23210115, '00000377 / c c machine constants for the honeywell 600/6000 series. c c data rmach(1) / o402400000000 / c data rmach(2) / o376777777777 / c data rmach(3) / o714400000000 / c data rmach(4) / o716400000000 / c data rmach(5) / o776464202324 / 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 rmach(1) / z00100000 / c data rmach(2) / z7fffffff / c data rmach(3) / z3b100000 / c data rmach(4) / z3c100000 / c data rmach(5) / z41134413 / c c machine constants for the pdp-10 (ka or ki processor). c c data rmach(1) / "000400000000 / c data rmach(2) / "377777777777 / c data rmach(3) / "146400000000 / c data rmach(4) / "147400000000 / c data rmach(5) / "177464202324 / c c machine constants for pdp-11 fortran's supporting c 32-bit integers (expressed in integer and octal). c c data small(1) / 8388608 / c data large(1) / 2147483647 / c data right(1) / 880803840 / c data diver(1) / 889192448 / c data log10(1) / 1067065499 / c c data rmach(1) / o00040000000 / c data rmach(2) / o17777777777 / c data rmach(3) / o06440000000 / c data rmach(4) / o06500000000 / c data rmach(5) / o07746420233 / c c machine constants for pdp-11 fortran's supporting c 16-bit integers (expressed in integer and octal). c c data small(1),small(2) / 128, 0 / c data large(1),large(2) / 32767, -1 / c data right(1),right(2) / 13440, 0 / c data diver(1),diver(2) / 13568, 0 / c data log10(1),log10(2) / 16282, 8347 / c c data small(1),small(2) / o000200, o000000 / c data large(1),large(2) / o077777, o177777 / c data right(1),right(2) / o032200, o000000 / c data diver(1),diver(2) / o032400, o000000 / c data log10(1),log10(2) / o037632, o020233 / c c machine constants for the univac 1100 series. c c data rmach(1) / o000400000000 / c data rmach(2) / o377777777777 / c data rmach(3) / o146400000000 / c data rmach(4) / o147400000000 / c data rmach(5) / o177464202324 / c c machine constants for the vax-11 c data small(1) / 128 / data large(1) / -32769 / data right(1) / 13440 / data diver(1) / 13568 / data log10(1) / 547045274 / if (i .lt. 1 .or. i .gt. 5) 1 call seterr(24hr1mach - i out of bounds,24,1,2) c r1mach = rmach(i) return c end double precision function d1mach(i) c c double-precision machine constants c c d1mach( 1) = b**(emin-1), the smallest positive magnitude. c c d1mach( 2) = b**emax*(1 - b**(-t)), the largest magnitude. c c d1mach( 3) = b**(-t), the smallest relative spacing. c c d1mach( 4) = b**(1-t), the largest relative spacing. c c d1mach( 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 where possible, octal or hexadecimal constants have been used c to specify the constants exactly which has in some cases c required the use of equivalent integer arrays. c integer small(4) integer large(4) integer right(4) integer diver(4) integer log10(4) c double precision dmach(5) c equivalence (dmach(1),small(1)) equivalence (dmach(2),large(1)) equivalence (dmach(3),right(1)) equivalence (dmach(4),diver(1)) equivalence (dmach(5),log10(1)) c c machine constants for the burroughs 1700 system. c c data small(1) / zc00800000 / c data small(2) / z000000000 / c c data large(1) / zdffffffff / c data large(2) / zfffffffff / c c data right(1) / zcc5800000 / c data right(2) / z000000000 / c c data diver(1) / zcc6800000 / c data diver(2) / z000000000 / c c data log10(1) / zd00e730e7 / c data log10(2) / zc77800dc0 / c c machine constants for the burroughs 5700 system. c c data small(1) / o1771000000000000 / c data small(2) / o0000000000000000 / c c data large(1) / o0777777777777777 / c data large(2) / o0007777777777777 / c c data right(1) / o1461000000000000 / c data right(2) / o0000000000000000 / c c data diver(1) / o1451000000000000 / c data diver(2) / o0000000000000000 / c c data log10(1) / o1157163034761674 / c data log10(2) / o0006677466732724 / c c machine constants for the burroughs 6700/7700 systems. c c data small(1) / o1771000000000000 / c data small(2) / o7770000000000000 / c c data large(1) / o0777777777777777 / c data large(2) / o7777777777777777 / c c data right(1) / o1461000000000000 / c data right(2) / o0000000000000000 / c c data diver(1) / o1451000000000000 / c data diver(2) / o0000000000000000 / c c data log10(1) / o1157163034761674 / c data log10(2) / o0006677466732724 / c c machine constants for the cdc 6000/7000 series. c c data small(1) / 00604000000000000000b / c data small(2) / 00000000000000000000b / c c data large(1) / 37767777777777777777b / c data large(2) / 37167777777777777777b / c c data right(1) / 15604000000000000000b / c data right(2) / 15000000000000000000b / c c data diver(1) / 15614000000000000000b / c data diver(2) / 15010000000000000000b / c c data log10(1) / 17164642023241175717b / c data log10(2) / 16367571421742254654b / c c machine constants for the cray 1 c c data small(1) / 200004000000000000000b / c data small(2) / 00000000000000000000b / c c data large(1) / 577777777777777777777b / c data large(2) / 000007777777777777777b / c c data right(1) / 377214000000000000000b / c data right(2) / 000000000000000000000b / c c data diver(1) / 377224000000000000000b / c data diver(2) / 000000000000000000000b / c c data log10(1) / 377774642023241175717b / c data log10(2) / 000007571421742254654b / c c machine constants for the data general eclipse s/200 c c note - it may be appropriate to include the following card - c static dmach(5) c c data small/20k,3*0/,large/77777k,3*177777k/ c data right/31420k,3*0/,diver/32020k,3*0/ c data log10/40423k,42023k,50237k,74776k/ c c machine constants for the harris 220 c c data small(1),small(2) / '20000000, '00000201 / c data large(1),large(2) / '37777777, '37777577 / c data right(1),right(2) / '20000000, '00000333 / c data diver(1),diver(2) / '20000000, '00000334 / c data log10(1),log10(2) / '23210115, '10237777 / c c machine constants for the honeywell 600/6000 series. c c data small(1),small(2) / o402400000000, o000000000000 / c data large(1),large(2) / o376777777777, o777777777777 / c data right(1),right(2) / o604400000000, o000000000000 / c data diver(1),diver(2) / o606400000000, o000000000000 / c data log10(1),log10(2) / o776464202324, o117571775714 / 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 small(1),small(2) / z00100000, z00000000 / c data large(1),large(2) / z7fffffff, zffffffff / c data right(1),right(2) / z33100000, z00000000 / c data diver(1),diver(2) / z34100000, z00000000 / c data log10(1),log10(2) / z41134413, z509f79ff / c c machine constants for the pdp-10 (ka processor). c c data small(1),small(2) / "033400000000, "000000000000 / c data large(1),large(2) / "377777777777, "344777777777 / c data right(1),right(2) / "113400000000, "000000000000 / c data diver(1),diver(2) / "114400000000, "000000000000 / c data log10(1),log10(2) / "177464202324, "144117571776 / c c machine constants for the pdp-10 (ki processor). c c data small(1),small(2) / "000400000000, "000000000000 / c data large(1),large(2) / "377777777777, "377777777777 / c data right(1),right(2) / "103400000000, "000000000000 / c data diver(1),diver(2) / "104400000000, "000000000000 / c data log10(1),log10(2) / "177464202324, "476747767461 / c c machine constants for pdp-11 fortran's supporting c 32-bit integers (expressed in integer and octal). c c data small(1),small(2) / 8388608, 0 / c data large(1),large(2) / 2147483647, -1 / c data right(1),right(2) / 612368384, 0 / c data diver(1),diver(2) / 620756992, 0 / c data log10(1),log10(2) / 1067065498, -2063872008 / c c data small(1),small(2) / o00040000000, o00000000000 / c data large(1),large(2) / o17777777777, o37777777777 / c data right(1),right(2) / o04440000000, o00000000000 / c data diver(1),diver(2) / o04500000000, o00000000000 / c data log10(1),log10(2) / o07746420232, o20476747770 / c c machine constants for pdp-11 fortran's supporting c 16-bit integers (expressed in integer and octal). c c data small(1),small(2) / 128, 0 / c data small(3),small(4) / 0, 0 / c c data large(1),large(2) / 32767, -1 / c data large(3),large(4) / -1, -1 / c c data right(1),right(2) / 9344, 0 / c data right(3),right(4) / 0, 0 / c c data diver(1),diver(2) / 9472, 0 / c data diver(3),diver(4) / 0, 0 / c c data log10(1),log10(2) / 16282, 8346 / c data log10(3),log10(4) / -31493, -12296 / c c data small(1),small(2) / o000200, o000000 / c data small(3),small(4) / o000000, o000000 / c c data large(1),large(2) / o077777, o177777 / c data large(3),large(4) / o177777, o177777 / c c data right(1),right(2) / o022200, o000000 / c data right(3),right(4) / o000000, o000000 / c c data diver(1),diver(2) / o022400, o000000 / c data diver(3),diver(4) / o000000, o000000 / c c data log10(1),log10(2) / o037632, o020232 / c data log10(3),log10(4) / o102373, o147770 / c c machine constants for the univac 1100 series. c c data small(1),small(2) / o000040000000, o000000000000 / c data large(1),large(2) / o377777777777, o777777777777 / c data right(1),right(2) / o170540000000, o000000000000 / c data diver(1),diver(2) / o170640000000, o000000000000 / c data log10(1),log10(2) / o177746420232, o411757177572 / c c machine constants for the vax-11 c data small(1),small(2) / 128, 0 / data large(1),large(2) / -32769, -1 / data right(1),right(2) / 9344, 0 / data diver(1),diver(2) / 9472, 0 / data log10(1),log10(2) / 546979738, -805796613 / c if (i .lt. 1 .or. i .gt. 5) 1 call seterr(24hd1mach - i out of bounds,24,1,2) c d1mach = dmach(i) return c end .