julia> mod(π,ℯ)
0.423310825130748
julia> mod(√2,π)
1.4142135623730951
julia> mod(π,π)
ERROR: mod not defined for Irrational{:π}
Stacktrace:
[1] error(::String, ::String, ::Type) at ./error.jl:42
[2] no_op_err at ./promotion.jl:420 [inlined]
[3] mod(::Irrational{:π}, ::Irrational{:π}) at ./promotion.jl:440
[4] top-level scope
julia> versioninfo()
Julia Version 0.7.0-DEV.3686
...
Two identical irrational numbers don’t parse well by mod()
. Is this a bug or by design?
Just to give a reason for why this happens (without commenting on if this is a bug or by design).
julia> typeof(promote(π, ℯ))
Tuple{Float64,Float64}
julia> typeof(promote(π, π))
Tuple{Irrational{:π},Irrational{:π}}
So in the first case we will call the mod
function with the irrationals converted to floats, but not in the second.
Perhaps something like
Base.mod(::Irrational{T}, ::Irrational{T}) where T = 0
& related could be used to cover this corner case.
1 Like
Thanks for the explanation. I don’t know if a corner case must be introduced, but of course I was expecting mod(π,π)==0
.
I must be missing something, but I thought mod(x,x)
should be 0
.
This would make a nice small feature addition pull request.
1 Like
Yes, please open an issue!