Microsoft KB Archive/35872

= Domain and Range of FORTRAN Natural Log Functions =

Article ID: 35872

Article Last Modified on 12/1/2003

-

APPLIES TO


 * Microsoft FORTRAN Compiler 4.0
 * Microsoft FORTRAN Compiler 4.01
 * Microsoft FORTRAN Compiler 4.1
 * Microsoft FORTRAN Compiler 5.0
 * Microsoft FORTRAN Compiler 5.1
 * Microsoft FORTRAN PowerStation 1.0 Standard Edition
 * Microsoft Fortran PowerStation 1.0a for MS-DOS
 * Microsoft FORTRAN PowerStation 32
 * Microsoft FORTRAN PowerStation 32

-



This article was previously published under Q35872



SUMMARY
The program below demonstrates the use of the exp (e**n) and log FORTRAN natural logarithm functions, using the limits of real*4 (or real) and real*8 values. Both the domain and range of these functions must be valid real*4 values for exp and log, and real*8 values for dexp and dlog. Consequently, the highest acceptable argument to the exp functions is the natural log of the maximum real number for the respective floating-point precisions.



MORE INFORMATION
The following demonstrates this information: c Program to manipulate natural log and exp functions with greatest and c smallest real*4 and real*8 values. The 16th decimal digit displayed c exceeds the 15 significant digits, and may not be accurate.

c Define extreme real*4 and real*8 values, and double- and c single-precision &quot;e&quot;

real*8 maxr8, minr8, pos0r8, neg0r8, e8     real*4 maxr4, minr4, pos0r4, neg0r4, e4

maxr8 =  1.7976931348623156d+308 minr8 = -1.7976931348623156d+308 pos0r8 = 2.23d-308 neg0r8 = -2.23d-308 e8    = dexp(1)

maxr4 =  1.701411e+38 minr4 = -1.701411e+38 pos0r4 = 1.701411e-38 neg0r4 = -1.701411e-38 e4    = exp(1)

write(*,*) write(*,*) 'Program to demonstrate use of natural log functions' write(*,*) 'with domain & range values at floating point limits.' write(*,*) write(*,*) 'There are 7 significant decimal digits in a real*4' write(*,*) '15 (or 16) significant decimal digits in a real*8.' write(*,*) write(*,*) 'The Intel coprocessor reference states that the' write(*,*) 'range of double precision (real*8) values is' write(*,*) 'approximately +/-2.23e-308 to +/-1.80e308. The' write(*,*) 'larger real*8 has been carried out to additional' write(*,*) 'digits of signifigance below.' write(*,*) write(*,*) 'Press ENTER to continue...' read(*,*) write(*,*) write(*,*) 'Display extreme real*4 and real*8 values:' write(*,*) write(*,*) 'max real*8          =  ', maxr8 write(*,*) 'min real*8          =  ', minr8 write(*,*) 'smallest positive r8 = ', pos0r8 write(*,*) 'smallest negative r8 = ', neg0r8 write(*,*) write(*,*) 'max real*4          = ', maxr4 write(*,*) 'min real*4          = ', minr4 write(*,*) 'smallest positive r4 = ', pos0r4 write(*,*) 'smallest negative r4 = ', neg0r4 write(*,*) write(*,*) 'Press ENTER to continue...' read(*,*) write(*,*) 'Perform real*4 and real*8 natural log and' write(*,*) 'exponentiation functions on limit values:' write(*,*) write(*,*) 'dexp(1) = real*8 e  =  ', e8      write(*,*) 'dlog(maxr8)          =  ', dlog(maxr8) write(*,*) 'dexp(dlog(maxr8))   =  ', dexp(dlog(maxr8)) write(*,*) 'dlog(smallest pos r8)= ', dlog(pos0r8) write(*,*) 'dexp(minr8)         =  ', dexp(minr8) write(*,*) write(*,*) 'exp(1) = real*4 e   = ', e4      write(*,*) 'log(maxr4)           = ', log(maxr4) write(*,*) 'exp(log(maxr4))     = ', exp(log(maxr4)) write(*,*) 'log(smallest pos r8) = ', log(pos0r4) write(*,*) 'exp(minr4)          = ', exp(minr4) write(*,*) write(*,*) 'Program completed. Good-bye.' end

Additional query words: 1.00 4.00 4.10 5.00 5.10 kbinf

Keywords: kblangfortran KB35872

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.