|
57 | 57 | x < big(y) |
58 | 58 | end |
59 | 59 |
|
60 | | -<=(x::Irrational,y::AbstractFloat) = x < y |
61 | | -<=(x::AbstractFloat,y::Irrational) = x < y |
| 60 | +<=(x::Irrational, y::AbstractFloat) = x < y |
| 61 | +<=(x::AbstractFloat, y::Irrational) = x < y |
62 | 62 |
|
63 | 63 | # Irrational vs Rational |
64 | | -@generated function <{T}(x::Irrational, y::Rational{T}) |
65 | | - bx = big(x()) |
66 | | - bx < 0 && T <: Unsigned && return true |
67 | | - rx = rationalize(T,bx,tol=0) |
68 | | - rx < bx ? :($rx < y) : :($rx <= y) |
| 64 | +@pure function rationalize{T<:Integer}(::Type{T}, x::Irrational; tol::Real=0) |
| 65 | + return rationalize(T, big(x), tol=tol) |
69 | 66 | end |
70 | | -@generated function <{T}(x::Rational{T}, y::Irrational) |
71 | | - by = big(y()) |
72 | | - by < 0 && T <: Unsigned && return false |
73 | | - ry = rationalize(T,by,tol=0) |
74 | | - ry < by ? :(x <= $ry) : :(x < $ry) |
| 67 | +@pure function rationalize{T<:Integer}(::Type{T}, x::Irrational) |
| 68 | + return rationalize(T, big(x), tol=0) |
| 69 | +end |
| 70 | +@pure function lessrational{T<:Integer}(rx::Rational{T}, x::Irrational) |
| 71 | + # an @pure version of `<` for determining if the rationalization of |
| 72 | + # an irrational number required rounding up or down |
| 73 | + return rx < big(x) |
| 74 | +end |
| 75 | +function <{T}(x::Irrational, y::Rational{T}) |
| 76 | + T <: Unsigned && x < 0.0 && return true |
| 77 | + rx = rationalize(T, x) |
| 78 | + if lessrational(rx, x) |
| 79 | + return rx < y |
| 80 | + else |
| 81 | + return rx <= y |
| 82 | + end |
| 83 | +end |
| 84 | +function <{T}(x::Rational{T}, y::Irrational) |
| 85 | + T <: Unsigned && y < 0.0 && return false |
| 86 | + ry = rationalize(T, y) |
| 87 | + if lessrational(ry, y) |
| 88 | + return x <= ry |
| 89 | + else |
| 90 | + return x < ry |
| 91 | + end |
75 | 92 | end |
76 | 93 | <(x::Irrational, y::Rational{BigInt}) = big(x) < y |
77 | 94 | <(x::Rational{BigInt}, y::Irrational) = x < big(y) |
78 | 95 |
|
79 | | -<=(x::Irrational,y::Rational) = x < y |
80 | | -<=(x::Rational,y::Irrational) = x < y |
| 96 | +<=(x::Irrational, y::Rational) = x < y |
| 97 | +<=(x::Rational, y::Irrational) = x < y |
81 | 98 |
|
82 | 99 | isfinite(::Irrational) = true |
83 | 100 |
|
|
0 commit comments