open_uniform_from_double53 Function

public pure function open_uniform_from_double53(raw) result(uniform)

53 bit 格子値 raw = k/2^53(k = 0..2^53-1)を (0, 1) へ写す。 raw に 2^-54 を足し、binary64 の最近接丸めで 1.0 になる最上端 k = 2^53-1 だけを 1 の直前値 1-2^-53 に留める。 それ以外の k では raw + 2^-54 と同じ binary64 値を返す。

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: raw

pcg64_random_double53 の戻り値([0, 1) の 53 bit 格子値)。

Return Value real(kind=dp)


Called by

proc~~open_uniform_from_double53~~CalledByGraph proc~open_uniform_from_double53 open_uniform_from_double53 none~next_uniform counter_stream_type%next_uniform none~next_uniform->proc~open_uniform_from_double53 proc~pcg64_open_uniform pcg64_open_uniform proc~pcg64_open_uniform->proc~open_uniform_from_double53 proc~counter_uniform counter_uniform proc~counter_uniform->proc~pcg64_open_uniform proc~counter_uniforms counter_uniforms proc~counter_uniforms->none~next_uniform proc~sample_standard_normal sample_standard_normal proc~sample_standard_normal->none~next_uniform proc~advance_particle_step advance_particle_step proc~advance_particle_step->proc~counter_uniforms proc~advance_particle_step_upper_panel_fourier advance_particle_step_upper_panel_fourier proc~advance_particle_step_upper_panel_fourier->proc~counter_uniforms proc~resolve_particle_boundary_candidate resolve_particle_boundary_candidate proc~resolve_particle_boundary_candidate->proc~counter_uniforms proc~sample_photo_emission_velocity sample_photo_emission_velocity proc~sample_photo_emission_velocity->proc~counter_uniform proc~sample_photo_emission_velocity->proc~sample_standard_normal proc~sample_photo_ray_slot sample_photo_ray_slot proc~sample_photo_ray_slot->proc~counter_uniforms proc~sample_photo_ray_slot->proc~sample_photo_emission_velocity proc~sample_reservoir_face_particle_counter sample_reservoir_face_particle_counter proc~sample_reservoir_face_particle_counter->proc~counter_uniforms proc~sample_reservoir_face_particle_counter->proc~sample_standard_normal proc~sample_shifted_maxwell_velocities sample_shifted_maxwell_velocities proc~sample_shifted_maxwell_velocities->proc~sample_standard_normal proc~secondary_emission_count secondary_emission_count proc~secondary_emission_count->proc~counter_uniform

Source Code

  pure real(dp) function open_uniform_from_double53(raw) result(uniform)
    real(dp), intent(in) :: raw
    real(dp), parameter :: half_ulp = 0.5_dp/9007199254740992.0_dp
    real(dp), parameter :: largest_below_one = nearest(1.0_dp, -1.0_dp)

    uniform = min(raw + half_ulp, largest_below_one)
  end function open_uniform_from_double53