src/Pure/General/rat.ML
changeset 63200 6eccfe9f5ef1
parent 63199 da38571dd5bd
child 63201 f151704c08e4
equal deleted inserted replaced
63199:da38571dd5bd 63200:6eccfe9f5ef1
    39   in ((p1 * (m div q1), p2 * (m div q2)), m) end;
    39   in ((p1 * (m div q1), p2 * (m div q2)), m) end;
    40 
    40 
    41 exception DIVZERO;
    41 exception DIVZERO;
    42 
    42 
    43 fun rat_of_quotient (p, q) =
    43 fun rat_of_quotient (p, q) =
    44   let val m = PolyML.IntInf.gcd (p, q)
    44   let
    45   in Rat (p div m, q div m) end handle Div => raise DIVZERO;
    45     val m = PolyML.IntInf.gcd (p, q);
       
    46     val (p', q') = (p div m, q div m) handle Div => raise DIVZERO;
       
    47   in Rat (if q' < 0 then (~ p', ~ q') else (p', q')) end
    46 
    48 
    47 fun quotient_of_rat (Rat r) = r;
    49 fun quotient_of_rat (Rat r) = r;
    48 
    50 
    49 fun rat_of_int i = Rat (i, 1);
    51 fun rat_of_int i = Rat (i, 1);
    50 
    52