Uniform unsigned integer in [0, span_minus_1], by rejection.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(pcg32_t), | intent(inout) | :: | gen | |||
| integer(kind=int64), | intent(in) | :: | span_minus_1 |
Inclusive upper bound, read as unsigned. |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=int64), | private | :: | mask |
function pcg32_uniform_below(gen, span_minus_1) result(r) !! Uniform unsigned integer in `[0, span_minus_1]`, by rejection. type(pcg32_t), intent(inout) :: gen integer(int64), intent(in) :: span_minus_1 !! Inclusive upper bound, read as unsigned. integer(int64) :: r integer(int64) :: mask if (span_minus_1 == 0_int64) then r = 0_int64 return end if mask = rejection_mask(span_minus_1) do r = iand(gen%next_u64(), mask) if (.not. u64_less(span_minus_1, r)) exit end do end function pcg32_uniform_below