@@ -18,21 +18,22 @@ unsafe_rational(num::T, den::T) where {T<:Integer} = unsafe_rational(T, num, den
18
18
unsafe_rational (num:: Integer , den:: Integer ) = unsafe_rational (promote (num, den)... )
19
19
20
20
@noinline __throw_rational_argerror_typemin (T) = throw (ArgumentError (" invalid rational: denominator can't be typemin($T )" ))
21
- function checked_den (num:: T , den:: T ) where T<: Integer
21
+ function checked_den (:: Type{T} , num:: T , den:: T ) where T<: Integer
22
22
if signbit (den)
23
23
den = - den
24
- signbit (den) && __throw_rational_argerror_typemin (T )
24
+ signbit (den) && __throw_rational_argerror_typemin (typeof (den) )
25
25
num = - num
26
26
end
27
27
return unsafe_rational (T, num, den)
28
28
end
29
+ checked_den (num:: T , den:: T ) where T<: Integer = checked_den (T, num, den)
29
30
checked_den (num:: Integer , den:: Integer ) = checked_den (promote (num, den)... )
30
31
31
32
@noinline __throw_rational_argerror_zero (T) = throw (ArgumentError (" invalid rational: zero($T )//zero($T )" ))
32
33
function Rational {T} (num:: Integer , den:: Integer ) where T<: Integer
33
34
iszero (den) && iszero (num) && __throw_rational_argerror_zero (T)
34
35
num, den = divgcd (num, den)
35
- return checked_den (T (num), T (den))
36
+ return checked_den (T, T (num), T (den))
36
37
end
37
38
38
39
Rational (n:: T , d:: T ) where {T<: Integer } = Rational {T} (n, d)
0 commit comments