1 /*
2 * This file is part of MPSolve 3.2.1
3 *
4 * Copyright (C) 2001-2020, Dipartimento di Matematica "L. Tonelli", Pisa.
5 * License: http://www.gnu.org/licenses/gpl.html GPL version 3 or higher
6 *
7 * Authors:
8 * Dario Andrea Bini <bini@dm.unipi.it>
9 * Giuseppe Fiorentino <fiorent@dm.unipi.it>
10 * Leonardo Robol <leonardo.robol@unipi.it>
11 */
12
13
14 #include <mps/link.h>
15
16 /***********************************************************
17 ** link functions **
18 ***********************************************************/
19
20 void
mpf_set_rdpe(mpf_t f,rdpe_t e)21 mpf_set_rdpe (mpf_t f, rdpe_t e)
22 {
23 mpf_set_d (f, rdpe_Mnt (e));
24 if (rdpe_Esp (e) >= 0)
25 mpf_mul_2exp (f, f, rdpe_Esp (e));
26 else
27 mpf_div_2exp (f, f, -rdpe_Esp (e));
28 }
29
30 void
mpf_get_rdpe(rdpe_t e,mpf_t f)31 mpf_get_rdpe (rdpe_t e, mpf_t f)
32 {
33 mp_exp_t esp;
34
35 esp = f->_mp_exp;
36 f->_mp_exp = 0;
37 rdpe_set_2dl (e, mpf_get_d (f), esp * mp_bits_per_limb);
38 f->_mp_exp = esp;
39 }
40
41 void
mpc_set_cplx(mpc_t mc,cplx_t c)42 mpc_set_cplx (mpc_t mc, cplx_t c)
43 {
44 mpf_set_d (mpc_Re (mc), cplx_Re (c));
45 mpf_set_d (mpc_Im (mc), cplx_Im (c));
46 }
47
48 void
mpc_get_cplx(cplx_t c,mpc_t mc)49 mpc_get_cplx (cplx_t c, mpc_t mc)
50 {
51 #ifdef MPS_USE_BUILTIN_COMPLEX
52 cplx_Re (c) = mpf_get_d (mpc_Re (mc));
53 cplx_Im (c) = mpf_get_d (mpc_Im (mc));
54 #else
55 cplx_set_d (c, mpf_get_d (mpc_Re (mc)),
56 mpf_get_d (mpc_Im (mc)));
57 #endif
58 }
59
60 void
mpc_set_cdpe(mpc_t mc,cdpe_t c)61 mpc_set_cdpe (mpc_t mc, cdpe_t c)
62 {
63 mpf_set_rdpe (mpc_Re (mc), cdpe_Re (c));
64 mpf_set_rdpe (mpc_Im (mc), cdpe_Im (c));
65 }
66
67 void
mpc_get_cdpe(cdpe_t c,mpc_t mc)68 mpc_get_cdpe (cdpe_t c, mpc_t mc)
69 {
70 mpf_get_rdpe (cdpe_Re (c), mpc_Re (mc));
71 mpf_get_rdpe (cdpe_Im (c), mpc_Im (mc));
72 }
73
74 /***********************************************************
75 ** **
76 ***********************************************************/
77