From 163a82655b1b3649c9bff4db05f487db3a992a40 Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Wed, 8 Nov 2017 17:01:04 +0100 Subject: Update functions --- dataType.ml | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'dataType.ml') diff --git a/dataType.ml b/dataType.ml index b6c4fd0..8e5ead0 100755 --- a/dataType.ml +++ b/dataType.ml @@ -33,7 +33,10 @@ module Num = struct let mult = Q.mul - let floor f = Q.of_bigint (Q.to_bigint f) + let floor t = + let num = Q.num t + and den = Q.den t in + Q.of_bigint @@ Z.fdiv num den let ge = Q.geq @@ -41,12 +44,29 @@ module Num = struct let le = Q.leq - let pow t q_factor = - let factor = Q.to_int q_factor - and num = Q.num t - and den = Q.num t in + let is_integer t = (Q.den t) == Z.one + + let pow t q_factor = begin + + if is_integer q_factor then + + let factor = Q.to_int q_factor + and num = Q.num t + and den = Q.den t in + + Q.make (Z.pow num factor) (Z.pow den factor) - Q.make (Z.pow num factor) (Z.pow den factor) + else + + let factor = Q.to_float q_factor + and num = Z.to_float @@ Q.num t + and den = Z.to_float @@ Q.den t in + + Q.div + (Q.of_float (num ** factor)) + (Q.of_float (den ** factor)) + + end let gcd t1 t2 = Q.of_bigint @@ Z.gcd (Q.to_bigint t1) (Q.to_bigint t2) @@ -54,8 +74,6 @@ module Num = struct let lcm t1 t2 = Q.of_bigint @@ Z.lcm (Q.to_bigint t1) (Q.to_bigint t2) - let is_integer t = (Q.den t) == Z.one - end module Bool = struct -- cgit v1.2.3