variance_dp Function

private pure function variance_dp(array, sample) result(v)

Variance of a real(dp) array (core implementation, two-pass).

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: array(:)
logical, intent(in), optional :: sample

Return Value real(kind=dp)


Called by

proc~~variance_dp~~CalledByGraph proc~variance_dp variance_dp interface~variance variance interface~variance->proc~variance_dp proc~variance_int32 variance_int32 interface~variance->proc~variance_int32 proc~variance_int64 variance_int64 interface~variance->proc~variance_int64 proc~variance_sp variance_sp interface~variance->proc~variance_sp proc~std_dev_dp std_dev_dp proc~std_dev_dp->proc~variance_dp proc~std_dev_int32 std_dev_int32 proc~std_dev_int32->proc~variance_dp proc~std_dev_int64 std_dev_int64 proc~std_dev_int64->proc~variance_dp proc~std_dev_sp std_dev_sp proc~std_dev_sp->proc~variance_dp proc~variance_int32->proc~variance_dp proc~variance_int64->proc~variance_dp proc~variance_sp->proc~variance_dp interface~std_dev std_dev interface~std_dev->proc~std_dev_dp interface~std_dev->proc~std_dev_int32 interface~std_dev->proc~std_dev_int64 interface~std_dev->proc~std_dev_sp

Variables

Type Visibility Attributes Name Initial
integer(kind=default_int), private :: denom
real(kind=dp), private :: m
integer(kind=default_int), private :: n
logical, private :: use_sample

Source Code

   pure function variance_dp(array, sample) result(v)
      !! Variance of a real(dp) array (core implementation, two-pass).
      real(dp), intent(in) :: array(:)
      logical, intent(in), optional :: sample
      real(dp) :: v
      real(dp) :: m
      integer(default_int) :: n, denom
      logical :: use_sample

      use_sample = .true.
      if (present(sample)) use_sample = sample

      n = size(array, kind=default_int)
      if (use_sample) then
         denom = n - 1
      else
         denom = n
      end if

      if (denom <= 0) then
         v = 0.0_dp
      else
         m = sum(array)/real(n, dp)
         v = sum((array - m)**2)/real(denom, dp)
      end if
   end function variance_dp