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 値を返す。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | raw |
|
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