pcg32_step Function

private function pcg32_step(self) result(r)

Advance the LCG one step and return the XSH-RR permutation of the previous state as an unsigned value in [0, 2**32).

Arguments

Type IntentOptional Attributes Name
class(pcg32_t), intent(inout) :: self

Return Value integer(kind=int64)


Calls

proc~~pcg32_step~~CallsGraph proc~pcg32_step pcg32_step proc~rotate_right32 rotate_right32 proc~pcg32_step->proc~rotate_right32 proc~u64_add u64_add proc~pcg32_step->proc~u64_add proc~u64_mul u64_mul proc~pcg32_step->proc~u64_mul proc~u64_shr u64_shr proc~pcg32_step->proc~u64_shr

Called by

proc~~pcg32_step~~CalledByGraph proc~pcg32_step pcg32_step proc~pcg32_next pcg32_t%pcg32_next proc~pcg32_next->proc~pcg32_step proc~pcg32_next_u64 pcg32_t%pcg32_next_u64 proc~pcg32_next_u64->proc~pcg32_step proc~pcg32_seed pcg32_t%pcg32_seed proc~pcg32_seed->proc~pcg32_step proc~pcg32_next_below pcg32_next_below proc~pcg32_next_below->proc~pcg32_next_u64 proc~pcg32_next_exponential_int pcg32_next_exponential_int proc~pcg32_next_exponential_int->proc~pcg32_next_u64 proc~pcg32_next_real_dp pcg32_next_real_dp proc~pcg32_next_real_dp->proc~pcg32_next_u64 proc~pcg32_uniform_below pcg32_uniform_below proc~pcg32_uniform_below->proc~pcg32_next_u64 interface~next_below next_below interface~next_below->proc~pcg32_next_below interface~next_exponential_int next_exponential_int interface~next_exponential_int->proc~pcg32_next_exponential_int interface~next_real_dp next_real_dp interface~next_real_dp->proc~pcg32_next_real_dp proc~pcg32_next_bernoulli_ppm pcg32_next_bernoulli_ppm proc~pcg32_next_bernoulli_ppm->proc~pcg32_uniform_below proc~pcg32_next_poisson_int pcg32_next_poisson_int proc~pcg32_next_poisson_int->proc~pcg32_next_exponential_int proc~pcg32_next_range pcg32_next_range proc~pcg32_next_range->proc~pcg32_uniform_below interface~next_bernoulli_ppm next_bernoulli_ppm interface~next_bernoulli_ppm->proc~pcg32_next_bernoulli_ppm interface~next_poisson_int next_poisson_int interface~next_poisson_int->proc~pcg32_next_poisson_int interface~next_range next_range interface~next_range->proc~pcg32_next_range proc~pcg32_next_exponential_dp pcg32_next_exponential_dp proc~pcg32_next_exponential_dp->interface~next_real_dp proc~pcg32_next_normal_dp pcg32_next_normal_dp proc~pcg32_next_normal_dp->interface~next_real_dp proc~splitmix64_next_exponential_dp splitmix64_next_exponential_dp proc~splitmix64_next_exponential_dp->interface~next_real_dp proc~splitmix64_next_normal_dp splitmix64_next_normal_dp proc~splitmix64_next_normal_dp->interface~next_real_dp interface~next_exponential_dp next_exponential_dp interface~next_exponential_dp->proc~pcg32_next_exponential_dp interface~next_exponential_dp->proc~splitmix64_next_exponential_dp interface~next_normal_dp next_normal_dp interface~next_normal_dp->proc~pcg32_next_normal_dp interface~next_normal_dp->proc~splitmix64_next_normal_dp

Variables

Type Visibility Attributes Name Initial
integer(kind=int64), private :: old

Source Code

   function pcg32_step(self) result(r)
      !! Advance the LCG one step and return the XSH-RR permutation of the
      !! *previous* state as an unsigned value in [0, 2**32).
      class(pcg32_t), intent(inout) :: self
      integer(int64) :: r

      integer(int64) :: old

      old = self%state
      self%state = u64_add(u64_mul(old, PCG_MULTIPLIER), self%increment)
      r = rotate_right32(ibits(ieor(u64_shr(old, 18_default_int), old), 27, 32), &
                         ibits(old, 59, 5))
   end function pcg32_step