next_poisson_int Interface

public interface next_poisson_int

Draw a Poisson-distributed count with mean mean_milli/1000.

The mean is given a thousand times over so that fractional means are expressible without a real type: mean_milli = 2500 means 2.5 events.

Counts the exponential inter-arrivals that fit inside a fixed window, which is the defining construction of a Poisson process rather than an approximation of one. Cost is O(mean).

mean_milli must be in [0, POISSON_MAX_MEAN_MILLI]. Zero returns zero without consuming a draw. Out of range returns zero and, if err is present, sets ERROR_VALIDATION.

Calls

interface~~next_poisson_int~~CallsGraph interface~next_poisson_int next_poisson_int proc~pcg32_next_poisson_int pcg32_next_poisson_int interface~next_poisson_int->proc~pcg32_next_poisson_int proc~splitmix64_next_poisson_int splitmix64_next_poisson_int interface~next_poisson_int->proc~splitmix64_next_poisson_int proc~error_set error_t%error_set proc~pcg32_next_poisson_int->proc~error_set proc~pcg32_next_exponential_int pcg32_next_exponential_int proc~pcg32_next_poisson_int->proc~pcg32_next_exponential_int proc~splitmix64_next_poisson_int->proc~error_set proc~splitmix64_next_exponential_int splitmix64_next_exponential_int proc~splitmix64_next_poisson_int->proc~splitmix64_next_exponential_int proc~pcg32_next_exponential_int->proc~error_set proc~pcg32_next_u64 pcg32_t%pcg32_next_u64 proc~pcg32_next_exponential_int->proc~pcg32_next_u64 proc~scale_by_mean scale_by_mean proc~pcg32_next_exponential_int->proc~scale_by_mean proc~u64_shr u64_shr proc~pcg32_next_exponential_int->proc~u64_shr proc~splitmix64_next_exponential_int->proc~error_set proc~splitmix64_next_exponential_int->proc~scale_by_mean proc~splitmix64_next_u64 splitmix64_t%splitmix64_next_u64 proc~splitmix64_next_exponential_int->proc~splitmix64_next_u64 proc~splitmix64_next_exponential_int->proc~u64_shr proc~pcg32_step pcg32_step proc~pcg32_next_u64->proc~pcg32_step proc~scale_by_mean->proc~u64_shr proc~splitmix64_next splitmix64_t%splitmix64_next proc~splitmix64_next_u64->proc~splitmix64_next proc~pcg32_step->proc~u64_shr 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~mix64 mix64 proc~splitmix64_next->proc~mix64 proc~splitmix64_next->proc~u64_add

Module Procedures

private function splitmix64_next_poisson_int(gen, mean_milli, err) result(r)

Poisson count with mean mean_milli/1000, from a splitmix64_t generator.

Arguments

Type IntentOptional Attributes Name
type(splitmix64_t), intent(inout) :: gen

Generator, advanced once per inter-arrival drawn.

integer(kind=default_int), intent(in) :: mean_milli

A thousand times the mean, in [0, POISSON_MAX_MEAN_MILLI].

type(error_t), intent(inout), optional :: err

Set to ERROR_VALIDATION when mean_milli is out of range.

Return Value integer(kind=int32)

private function pcg32_next_poisson_int(gen, mean_milli, err) result(r)

Poisson count with mean mean_milli/1000, from a pcg32_t generator.

Arguments

Type IntentOptional Attributes Name
type(pcg32_t), intent(inout) :: gen

Generator, advanced once per inter-arrival drawn.

integer(kind=default_int), intent(in) :: mean_milli

A thousand times the mean, in [0, POISSON_MAX_MEAN_MILLI].

type(error_t), intent(inout), optional :: err

Set to ERROR_VALIDATION when mean_milli is out of range.

Return Value integer(kind=int32)