@@ -278,13 +278,35 @@ function -(x::Rational{T}) where T<:Unsigned
278
278
x
279
279
end
280
280
281
- for (op,chop) in ((:+ ,:checked_add ), (:- ,:checked_sub ), (:rem ,:rem ), (:mod ,:mod ))
281
+ function + (x:: Rational , y:: Rational )
282
+ xp, yp = promote (x, y)
283
+ if isinf (x) && x == y
284
+ return xp
285
+ end
286
+ xd, yd = divgcd (promote (x. den, y. den)... )
287
+ Rational (checked_add (checked_mul (x. num,yd), checked_mul (y. num,xd)), checked_mul (x. den,yd))
288
+ end
289
+
290
+ function - (x:: Rational , y:: Rational )
291
+ xp, yp = promote (x, y)
292
+ if isinf (x) && x == - y
293
+ return xp
294
+ end
295
+ xd, yd = divgcd (promote (x. den, y. den)... )
296
+ Rational (checked_sub (checked_mul (x. num,yd), checked_mul (y. num,xd)), checked_mul (x. den,yd))
297
+ end
298
+
299
+ for (op,chop) in ((:rem ,:rem ), (:mod ,:mod ))
282
300
@eval begin
283
301
function ($ op)(x:: Rational , y:: Rational )
284
302
xd, yd = divgcd (promote (x. den, y. den)... )
285
303
Rational (($ chop)(checked_mul (x. num,yd), checked_mul (y. num,xd)), checked_mul (x. den,yd))
286
304
end
305
+ end
306
+ end
287
307
308
+ for (op,chop) in ((:+ ,:checked_add ), (:- ,:checked_sub ), (:rem ,:rem ), (:mod ,:mod ))
309
+ @eval begin
288
310
function ($ op)(x:: Rational , y:: Integer )
289
311
unsafe_rational (($ chop)(x. num, checked_mul (x. den, y)), x. den)
290
312
end
0 commit comments