[MLton] MLton.IntInf
   
    Jens Axel Søgaard
     
    jensaxel@soegaard.net
       
    Thu, 28 Apr 2005 20:02:43 +0200
    
    
  
Wesley W. Terpstra wrote:
 > On Tue, Apr 26, 2005 at 09:30:23PM -0700, Stephen Weeks wrote:
 >
 >>>Why not also the gcdext, inverse, powm, fdiv_r_2exp, and probab_prime?
Another important operation is integer square root extraction.
Your post inspired me to look at mlton/basic/rational.fun.
       datatype t = T of I.t * I.t
       (* always use smallest nonnegative denominator *)
       fun numerator(T(n,_)) = n
       fun denominator(T(_,n)) = n
      fun scale(T(p,q),T(p',q')) =
          let val l = I.lcm(q,q')
          in (p * (l div q'),
              p' * (l div q),
              l)
          end
       val (op +) = fn (x,y) =>
          let val (p,p',l) = scale(x,y)
          in T(p + p',l)
          end
Since             p + nq
        n + p/q = ---------
                      q
wouldn't
       val (op +) =
          fn (T(n,1), T(p,q)) => T(p+n*q, q)
           | (x,y) => let val (p,p',l) = scale(x,y)
                          in T(p + p',l)
                      end
be an improvement?
-- 
Jens Axel Søgaard