pcg64_open_uniform Function

public function pcg64_open_uniform(state_seed, stream, draw) result(uniform)

PCG64(state_seed, stream) を draw 回進めた次の値を (0, 1) で返す(変換は open_uniform_from_double53)。

Arguments

Type IntentOptional Attributes Name
integer(kind=i64), intent(in) :: state_seed
integer(kind=i64), intent(in) :: stream
integer(kind=i64), intent(in) :: draw

Return Value real(kind=dp)


Calls

proc~~pcg64_open_uniform~~CallsGraph proc~pcg64_open_uniform pcg64_open_uniform pcg64_advance pcg64_advance proc~pcg64_open_uniform->pcg64_advance pcg64_create pcg64_create proc~pcg64_open_uniform->pcg64_create pcg64_destroy pcg64_destroy proc~pcg64_open_uniform->pcg64_destroy pcg64_random_double53 pcg64_random_double53 proc~pcg64_open_uniform->pcg64_random_double53 proc~open_uniform_from_double53 open_uniform_from_double53 proc~pcg64_open_uniform->proc~open_uniform_from_double53

Called by

proc~~pcg64_open_uniform~~CalledByGraph proc~pcg64_open_uniform pcg64_open_uniform proc~counter_uniform counter_uniform proc~counter_uniform->proc~pcg64_open_uniform proc~sample_photo_emission_velocity sample_photo_emission_velocity proc~sample_photo_emission_velocity->proc~counter_uniform proc~secondary_emission_count secondary_emission_count proc~secondary_emission_count->proc~counter_uniform proc~sample_photo_ray_slot sample_photo_ray_slot proc~sample_photo_ray_slot->proc~sample_photo_emission_velocity

Source Code

  real(dp) function pcg64_open_uniform(state_seed, stream, draw) result(uniform)
    integer(i64), intent(in) :: state_seed, stream, draw
    type(c_ptr) :: handle

    if (draw < 0_i64) error stop 'counter_uniform draw must be >= 0.'
    handle = pcg64_create(int(state_seed, c_int64_t), int(stream, c_int64_t))
    if (.not. c_associated(handle)) error stop 'failed to create a PCG64 generator.'
    if (draw > 0_i64) call pcg64_advance(handle, int(draw, c_int64_t))
    uniform = open_uniform_from_double53(pcg64_random_double53(handle))
    call pcg64_destroy(handle)
  end function pcg64_open_uniform