# HG changeset patch # User wenzelm # Date 1464728763 -7200 # Node ID 6eccfe9f5ef10ccc16f33d7ddb53b7abe70d8b6c # Parent da38571dd5bdd7ac0a377c27060dee54b90c24c0 maintain invariant for exported operation; diff -r da38571dd5bd -r 6eccfe9f5ef1 src/Pure/General/rat.ML --- a/src/Pure/General/rat.ML Tue May 31 22:39:28 2016 +0200 +++ b/src/Pure/General/rat.ML Tue May 31 23:06:03 2016 +0200 @@ -41,8 +41,10 @@ exception DIVZERO; fun rat_of_quotient (p, q) = - let val m = PolyML.IntInf.gcd (p, q) - in Rat (p div m, q div m) end handle Div => raise DIVZERO; + let + val m = PolyML.IntInf.gcd (p, q); + val (p', q') = (p div m, q div m) handle Div => raise DIVZERO; + in Rat (if q' < 0 then (~ p', ~ q') else (p', q')) end fun quotient_of_rat (Rat r) = r;