You can post it as an issue.
On Tuesday, May 10, 2016 at 4:21:18 PM UTC-4, Jeffrey Sarnoff wrote: > > This appears to be a bug. The docs for rationalize > <http://docs.julialang.org/en/latest/stdlib/math> say > rationalize([*Type=Int*, ]*x; tol=eps(x)*) Approximate floating point > number x as a Rational number with components of the given integer type. > The result will differ from x by no more than tol. > > meanwhile, here is a "long way around" that may do what you want > (signature and special cases are cribbed from rational.jl) > > function rationalized{T<:Integer}(::Type{T}, x::AbstractFloat; > tol::Real=eps(x)) > tol < 0 && throw(ArgumentError("negative tolerance')) > isnan(x) && return zero(T)//zero(T) > isinf(x) && return (x < 0 ? -one(T) : one(T)) // zero(T) > rationalize(round(x, floor(Int,abs(log2(tol))))) > end > > > On Thursday, May 5, 2016 at 11:13:45 AM UTC-4, James Fairbanks wrote: >> >> Hello julia-users, >> >> Does rationalize ever return 0//1 for nonzero inputs? >> >> 0.0+eps(Float64) is much closer to 0//1 than to 1//1. >> Why can't I get 0//1 out of rationalize(x) if x != 0.0? >> Is this to avoid divide by 0 errors when using a/rationalize(x) where 0 < >> x < tol? >> >> For example on julia v0.4.5 >> julia> rationalize(0.0) >> 0//1 >> >> julia> rationalize(0.0+eps(Float64)) >> 1//4503599627370496 >> >> julia> rationalize(0.0+eps(Float64);tol=1e-4) >> 1//1 >> >> julia> rationalize(0.0+eps(Float64);tol=1e-4) >> 1//1 >> >> Thanks, >> James >> >
