src/Pure/General/integer.ML
changeset 28870 381a3b3139ae
parent 28308 d4396a28fb29
child 28882 57bfd0fdea09
equal deleted inserted replaced
28869:191cbfac6c9a 28870:381a3b3139ae
    14   val pow: int -> int -> int (* exponent -> base -> result *)
    14   val pow: int -> int -> int (* exponent -> base -> result *)
    15   val gcd: int -> int -> int
    15   val gcd: int -> int -> int
    16   val gcds: int list -> int
    16   val gcds: int list -> int
    17   val lcm: int -> int -> int
    17   val lcm: int -> int -> int
    18   val lcms: int list -> int
    18   val lcms: int list -> int
       
    19   val log: int -> int        (* binary logarithm *)
    19 end;
    20 end;
    20 
    21 
    21 structure Integer : INTEGER =
    22 structure Integer : INTEGER =
    22 struct
    23 struct
    23 
    24 
    52 fun gcds xs = fold gcd xs 0;
    53 fun gcds xs = fold gcd xs 0;
    53 
    54 
    54 fun lcm x y = (x * y) div (gcd x y);
    55 fun lcm x y = (x * y) div (gcd x y);
    55 fun lcms xs = fold lcm xs 1;
    56 fun lcms xs = fold lcm xs 1;
    56 
    57 
       
    58 fun logr 1 a = a
       
    59   | logr n a = logr (n div 2) (a + 1)
       
    60 
       
    61 fun log n = if n > 0 then logr n 0 else error "log: <= 0"
       
    62 
    57 end;
    63 end;
    58 
    64