Skip to content

Commit

Permalink
Merge pull request #9387 from JuliaLang/rf/float16-equal1
Browse files Browse the repository at this point in the history
fix rand(Float16|Float32) equal to 1
  • Loading branch information
ivarne committed Dec 23, 2014
2 parents 7261160 + f1ab1c9 commit 4814557
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
12 changes: 12 additions & 0 deletions base/random.jl
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,18 @@ rand(r::AbstractArray, dims::Integer...) = rand(GLOBAL_RNG, r, convert((Int...),
@inline rand(r::Union(RandomDevice,MersenneTwister), ::Type{Float64}) = rand(r, CloseOpen)
rand{T<:Union(Float16, Float32)}(r::Union(RandomDevice,MersenneTwister), ::Type{T}) = convert(T, rand(r, Float64))

rand_ui10_raw(r::MersenneTwister) = rand_ui52_raw(r)
rand_ui23_raw(r::MersenneTwister) = rand_ui52_raw(r)
rand_ui10_raw(r::AbstractRNG) = rand(r, UInt16)
rand_ui23_raw(r::AbstractRNG) = rand(r, UInt32)

rand(r::Union(RandomDevice,MersenneTwister), ::Type{Float16}) =
Float16(reinterpret(Float32, rand_ui10_raw(r) % UInt32 & 0x007fe000 | 0x3f800000) - 1)

rand(r::Union(RandomDevice,MersenneTwister), ::Type{Float32}) =
reinterpret(Float32, rand_ui23_raw(r) % UInt32 & 0x007fffff | 0x3f800000) - 1


## random integers

@inline rand_ui52(r::AbstractRNG) = reinterpret(UInt64, rand(r, Close1Open2)) & 0x000fffffffffffff
Expand Down
2 changes: 1 addition & 1 deletion test/random.jl
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ let mt = MersenneTwister(0)
-3482609696641744459568613291754091152,float16(0.03125),0.68733835f0][i]

@test B[end] == Any[49,0x65,-3725,0x719d,814246081,0xdf61843a,-3010919637398300844,0x61b367cf8810985d,
-33032345278809823492812856023466859769,float16(0.9346),0.5929704f0][i]
-33032345278809823492812856023466859769,float16(0.458),0.51829386f0][i]
end

srand(mt,0)
Expand Down

0 comments on commit 4814557

Please sign in to comment.