seed と counter から PCG64 の (初期状態 seed, stream) を作る。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=i32), | intent(in) | :: | seed | |||
| integer(kind=i64), | intent(in) | :: | counter(:) | |||
| integer(kind=i64), | intent(out) | :: | state_seed | |||
| integer(kind=i64), | intent(out) | :: | stream |
pure subroutine counter_key(seed, counter, state_seed, stream) integer(i32), intent(in) :: seed integer(i64), intent(in) :: counter(:) integer(i64), intent(out) :: state_seed, stream integer(i64) :: lanes(4) integer :: lane do lane = 1, 4 lanes(lane) = murmur3_tuple(lane_seed(lane), int(seed, i64), counter) end do state_seed = ior(ishft(lanes(1), 32), lanes(2)) stream = ior(ishft(lanes(3), 32), lanes(4)) end subroutine counter_key