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