True with probability ppm in a million, from a pcg32_t generator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(pcg32_t), | intent(inout) | :: | gen |
Generator, advanced by the draw unless |
||
| integer(kind=default_int), | intent(in) | :: | ppm |
Probability in parts per million, clamped to |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=default_int), | private | :: | clamped |
function pcg32_next_bernoulli_ppm(gen, ppm) result(r) !! True with probability `ppm` in a million, from a pcg32_t generator. type(pcg32_t), intent(inout) :: gen !! Generator, advanced by the draw unless `ppm` is 0 or `PPM_ONE`. integer(default_int), intent(in) :: ppm !! Probability in parts per million, clamped to `[0, PPM_ONE]`. logical :: r integer(default_int) :: clamped clamped = max(0_default_int, min(PPM_ONE, ppm)) if (clamped == 0_default_int) then r = .false. return end if if (clamped == PPM_ONE) then r = .true. return end if r = pcg32_uniform_below(gen, int(PPM_ONE, int64) - 1_int64) < int(clamped, int64) end function pcg32_next_bernoulli_ppm