The LOG function returns the natural logarithm of a real or complex argument.

## Syntax

LOG (x)

*x* is an INTENT(IN) scalar or array of type REAL or COMPLEX.

If *x* is REAL, it must be greater than zero.

If *x* is COMPLEX, it must not be equal to zero.

The result is of the same type and kind as *x*.

If *x* is REAL, its value is equal to a REAL representation of log_{
e}x.

If *x* is COMPLEX, its value is equal to the principal value with imaginary part Ω in the range

If *x* is REAL and equal to zero, a floating divide exception occurs, and unless trapped, the value -Inf (negative infinity) is returned.

If *x* is REAL and less than zero, an invalid operation exception occurs, and unless trapped, the value -NaN (not a number) is returned.

If *x* is COMPLEX with both the real and imaginary parts equal to zero, a runtime error occurs and execution is terminated.

## Example

real ::x.1.,xa(2)=(/.5,1.5/),pi=3.141592654 real :: re,im complex :: q=(-1.,1.) write(*,*) log(x) ! writes 0.0 write(*,*) log(xa) ! writes -.69314718 .40546509 write(*,*) log(q) ! writes (.34657359, 2.3561945) re=log((sqrt(real(q)**2+aimag(q)**2))) ! real part of log(q) im=-atan2(real(q),aimag(q))+pi/2. ! imag part of log(q) write(*,*) re,im write(*,*) log(0.) ! writes -Inf or error occurs write(*,*) log(-1.) ! writes -NaN or error occurs