As I mentioned in #102, PR #131 did not change the rem, so this is a reminder.
To avoid impact on the performance, this PR does not change the rem.
|
rem(x::T, ::Type{T}) where {T <: Normed} = x |
|
rem(x::Normed, ::Type{T}) where {T <: Normed} = reinterpret(T, _unsafe_trunc(rawtype(T), round((rawone(T)/rawone(x))*reinterpret(x)))) |
|
rem(x::Real, ::Type{T}) where {T <: Normed} = reinterpret(T, _unsafe_trunc(rawtype(T), round(rawone(T)*x))) |
|
rem(x::Float16, ::Type{T}) where {T <: Normed} = rem(Float32(x), T) # avoid overflow |
Therefore, this does not fix the problems such as:
julia> using Colors
julia> white = parse(RGB{Float32}, "white")
RGB{Float32}(1.0f0,1.0f0,1.0f0)
julia> convert(RGB{N0f32}, white)
RGB{N0f32}(0.0,0.0,0.0)
Originally posted by @kimikage in #131 (comment)
julia> using FixedPointNumbers
julia> for f = 1:32
F = Normed{UInt32,f}
rem_one = 1.0f0 % F
rem_one == one(F) || @show rem_one
end
rem_one = 1.00000003N7f25
rem_one = 1.00000001N6f26
rem_one = 1.000000007N5f27
rem_one = 1.000000004N4f28
rem_one = 1.000000002N3f29
rem_one = 1.0000000009N2f30
rem_one = 1.0000000005N1f31
rem_one = 0.0N0f32
As I mentioned in #102, PR #131 did not change the
rem, so this is a reminder.Originally posted by @kimikage in #131 (comment)