aboutsummaryrefslogtreecommitdiff
path: root/dataType.ml
diff options
context:
space:
mode:
Diffstat (limited to 'dataType.ml')
-rwxr-xr-xdataType.ml34
1 files changed, 26 insertions, 8 deletions
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