Manual Reference Pages  - exponent (3fortran)

NAME

EXPONENT(3) - [MODEL:COMPONENTS] Exponent of floating-point number

SYNOPSIS

result = exponent(x)

elemental integer function exponent(x)

         real(kind=**),intent(in) :: x

CHARACTERISTICS

o X shall be of type real of any valid kind
o the result is a default integer type

DESCRIPTION

EXPONENT(3) returns the value of the exponent part of X, provided the exponent is within the range of default integers.

OPTIONS

o X : the value to query the exponent of

RESULT

EXPONENT(3) returns the value of the exponent part of X

If X is zero the value returned is zero.

If X is an IEEE infinity or NaN, the result has the value HUGE(0).

EXAMPLES

Sample program:

    program demo_exponent
    implicit none
    real    :: x
    integer :: i
       print *, ’basic usage’
       print *, exponent([2.0,32.0,256.0,0.25])
       print *, exponent([1.0,10.0,100.0])
       print ’(g0,1x,a,g0,1x,b32.32)’, 500.0, ’exponent(500.0)=’, &
       exponent(500.0), 500.0
       print ’(g0,1x,a,g0,1x,b32.32)’, 512.0, ’exponent(512.0)=’, &
       exponent(512.0), 512.0
       print ’(g0,1x,a,g0,1x,b32.32)’, 550.0, ’exponent(550.0)=’, &
       exponent(550.0), 525.0
       print *,’==>’,log([500.0,512.0,550.0])/log(2.0)
       x=9.31
       i = exponent(x)
       print *, i ,  x

print *, ’elemental’ print *, exponent([10.0,100.0,1000.0,-10000.0])

! beware of overflow, it may occur silently !print *, 2**[10.0,100.0,1000.0,-10000.0]

print *, ’exponent range’ print *, minexponent(0.0), maxexponent(0.0) print *, exponent(tiny(0.0)), exponent(huge(0.0)) call dusty_corners() contains subroutine dusty_corners() use, intrinsic :: ieee_arithmetic real :: my_inf, my_neg_inf real :: my_qnan, my_snan

print * print *, ’exponent(0.0)=’, exponent(0.0) print * ! Generate positive infinity my_inf = ieee_value(my_inf, ieee_positive_inf) !print "(A,b32.32)" ,’in binary format = ’,my_inf print *, ’ieee_value(my_inf, ieee_positive_inf) =’, my_inf print * ! Generate negative infinity my_neg_inf = ieee_value(my_neg_inf, ieee_negative_inf) print *,’ieee_value(my_inf, ieee_neg_inf)’, my_neg_inf print * print *,’exponent([my_inf,my_neg_inf]) =’,exponent([my_inf,my_neg_inf])

if (ieee_support_nan(x)) then

print * my_qnan = ieee_value(my_qnan, ieee_quiet_nan) print *, ’ieee_value(my_qnan, ieee_quiet_nan) =’, my_qnan my_snan = ieee_value(my_snan, ieee_signaling_nan) print *, ’ieee_value(my_snan, ieee_signaling_nan) =’, my_snan print *, ’exponent([my_qnan,my_snan]) =’,exponent([my_qnan,my_snan]) print * print *, ’Not sure ...’ print *, ’exponent(tiny(0.0)/2)=’, exponent(tiny(0.0)/2)

endif end subroutine dusty_corners

end program demo_exponent

Results:

      >  basic usage
      >            4   9.31000042   
      >  elemental
      >            4           7          10          14
      >  exponent range
      >         -125         128
      >         -125         128
      >
      >  exponent(0.0)=           0
      >
      >  ieee_value(my_inf, ieee_positive_inf) =         Infinity
      >
      >  ieee_value(my_inf, ieee_neg_inf)        -Infinity
      >
      >  exponent([my_inf,my_neg_inf]) =  2147483647  2147483647
      >
      >  ieee_value(my_qnan, ieee_quiet_nan) =              NaN
      >  ieee_value(my_snan, ieee_signaling_nan) =              NaN
      >  exponent([my_qnan,my_snan]) =  2147483647  2147483647
      >
      >  Not sure ...
      >  exponent(tiny(0.0)/2)=        -126

STANDARD

Fortran 95

SEE ALSO

DIGITS(3), EPSILON(3), FRACTION(3), HUGE(3), MAXEXPONENT(3), MINEXPONENT(3), NEAREST(3), PRECISION(3), RADIX(3), RANGE(3), RRSPACING(3), SCALE(3), SET_EXPONENT(3), SPACING(3), TINY(3)

Fortran intrinsic descriptions