diff options
author | Sébastien Dailly <sebastien@chimrod.com> | 2017-11-08 17:01:04 +0100 |
---|---|---|
committer | Sébastien Dailly <sebastien@chimrod.com> | 2017-11-08 17:01:04 +0100 |
commit | 163a82655b1b3649c9bff4db05f487db3a992a40 (patch) | |
tree | b7308ea89caef819825683551b6ceb9fc6c72369 /dataType.ml | |
parent | 5eb60432c81bd13f26852a4cef9b1a570002883d (diff) |
Update functions
Diffstat (limited to 'dataType.ml')
-rwxr-xr-x | dataType.ml | 34 |
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
|