50 lines
1.3 KiB
OCaml
50 lines
1.3 KiB
OCaml
|
|
(**
|
||
|
|
Conversion between Zarith and MLGmpIDL integers and rationals.
|
||
|
|
|
||
|
|
|
||
|
|
This file is part of the Zarith library
|
||
|
|
http://forge.ocamlcore.org/projects/zarith .
|
||
|
|
It is distributed under LGPL 2 licensing, with static linking exception.
|
||
|
|
See the LICENSE file included in the distribution.
|
||
|
|
|
||
|
|
Copyright (c) 2010-2011 Antoine Miné, Abstraction project.
|
||
|
|
Abstraction is part of the LIENS (Laboratoire d'Informatique de l'ENS),
|
||
|
|
a joint laboratory by:
|
||
|
|
CNRS (Centre national de la recherche scientifique, France),
|
||
|
|
ENS (École normale supérieure, Paris, France),
|
||
|
|
INRIA Rocquencourt (Institut national de recherche en informatique, France).
|
||
|
|
|
||
|
|
*)
|
||
|
|
|
||
|
|
external mlgmpidl_of_mpz: Mpz.t -> Z.t = "ml_z_mlgmpidl_of_mpz"
|
||
|
|
external mlgmpidl_set_mpz: Mpz.t -> Z.t -> unit = "ml_z_mlgmpidl_set_mpz"
|
||
|
|
|
||
|
|
let z_of_mpz x =
|
||
|
|
mlgmpidl_of_mpz x
|
||
|
|
|
||
|
|
let mpz_of_z x =
|
||
|
|
let r = Mpz.init () in
|
||
|
|
mlgmpidl_set_mpz r x;
|
||
|
|
r
|
||
|
|
|
||
|
|
let z_of_mpzf x =
|
||
|
|
z_of_mpz (Mpzf._mpz x)
|
||
|
|
|
||
|
|
let mpzf_of_z x =
|
||
|
|
Mpzf._mpzf (mpz_of_z x)
|
||
|
|
|
||
|
|
let q_of_mpq x =
|
||
|
|
let n,d = Mpz.init (), Mpz.init () in
|
||
|
|
Mpq.get_num n x;
|
||
|
|
Mpq.get_den d x;
|
||
|
|
Q.make (z_of_mpz n) (z_of_mpz d)
|
||
|
|
|
||
|
|
let mpq_of_q x =
|
||
|
|
Mpq.of_mpz2 (mpz_of_z x.Q.num) (mpz_of_z x.Q.den)
|
||
|
|
|
||
|
|
let q_of_mpqf x =
|
||
|
|
q_of_mpq (Mpqf._mpq x)
|
||
|
|
|
||
|
|
let mpqf_of_q x =
|
||
|
|
Mpqf._mpqf (mpq_of_q x)
|