carl  24.04
Computer ARithmetic Library
native.h
Go to the documentation of this file.
1 
2 namespace carl {
3 
4  template<>
5  inline mpq_class convert<double, mpq_class>(const double& n) {
7  }
8 
9  template<>
10  inline double convert<mpq_class, double>(const mpq_class& n) {
11  return carl::to_double(n);
12  }
13 
14  template<>
15  inline FLOAT_T<mpq_class> convert<double, FLOAT_T<mpq_class>>(const double& n) {
16  return FLOAT_T<mpq_class>(carl::rationalize<mpq_class>(n));
17  }
18 
19  template<>
20  inline double convert<FLOAT_T<mpq_class>, double>(const FLOAT_T<mpq_class>& n) {
21  return carl::to_double(n.value());
22  }
23 
24  template<>
25  inline FLOAT_T<double> convert<mpq_class, FLOAT_T<double>>(const mpq_class& n) {
26  return FLOAT_T<double>(carl::to_double(n));
27  }
28 
29  template<>
30  inline mpq_class convert<FLOAT_T<double>, mpq_class>(const FLOAT_T<double>& n) {
31  return carl::rationalize<mpq_class>(n.value());
32  }
33 
34  template<>
35  inline mpq_class convert<FLOAT_T<mpq_class>, mpq_class>(const FLOAT_T<mpq_class>& n) {
36  return n.value();
37  }
38 
39  template<>
40  inline FLOAT_T<mpq_class> convert<mpq_class, FLOAT_T<mpq_class>>(const mpq_class& n) {
41  return FLOAT_T<mpq_class>(n);
42  }
43 
44  template<>
45  inline double convert<FLOAT_T<double>, double>(const FLOAT_T<double>& n) {
46  return n.value();
47  }
48 
49  template<>
50  inline FLOAT_T<double> convert<double, FLOAT_T<double>>(const double& n) {
51  return FLOAT_T<double>(n);
52  }
53 
54  #ifdef USE_MPFR_FLOAT
55  template<>
56  inline double convert<FLOAT_T<mpfr_t>, double>(const FLOAT_T<mpfr_t>& n) {
57  return carl::to_double(n);
58  }
59 
60  template<>
61  inline FLOAT_T<mpfr_t> convert<double, FLOAT_T<mpfr_t>>(const double& n) {
62  return FLOAT_T<mpfr_t>(n);
63  }
64  #endif
65 
66  #ifdef USE_CLN_NUMBERS
67  template<>
68  inline double convert<cln::cl_RA, double>(const cln::cl_RA& n) {
69  return carl::to_double(n);
70  }
71 
72  template<>
73  inline cln::cl_RA convert<double, cln::cl_RA>(const double& n) {
74  return carl::rationalize<cln::cl_RA>(n);
75  }
76 
77  template<>
78  inline double convert<FLOAT_T<cln::cl_RA>, double>(const FLOAT_T<cln::cl_RA>& n) {
79  return carl::to_double(n);
80  }
81 
82  template<>
83  inline FLOAT_T<cln::cl_RA> convert<double, FLOAT_T<cln::cl_RA>>(const double& n) {
84  return FLOAT_T<cln::cl_RA>(n);
85  }
86 
87  template<>
88  inline cln::cl_RA convert<FLOAT_T<cln::cl_RA>, cln::cl_RA>(const FLOAT_T<cln::cl_RA>& n) {
89  return n.value();
90  }
91 
92  template<>
93  inline FLOAT_T<cln::cl_RA> convert<cln::cl_RA, FLOAT_T<cln::cl_RA>>(const cln::cl_RA& n) {
94  return FLOAT_T<cln::cl_RA>(n);
95  }
96 
97  template<>
98  inline mpq_class convert<FLOAT_T<cln::cl_RA>, mpq_class>(const FLOAT_T<cln::cl_RA>& n) {
99  return convert<cln::cl_RA,mpq_class>(n.value());
100  }
101 
102  template<>
103  inline FLOAT_T<cln::cl_RA> convert<mpq_class, FLOAT_T<cln::cl_RA>>(const mpq_class& n) {
104  return FLOAT_T<cln::cl_RA>(convert<mpq_class,cln::cl_RA>(n));
105  }
106 
107  template<>
108  inline cln::cl_RA convert<FLOAT_T<mpq_class>, cln::cl_RA>(const FLOAT_T<mpq_class>& n) {
109  return convert<mpq_class,cln::cl_RA>(n.value());
110  }
111 
112  template<>
113  inline FLOAT_T<mpq_class> convert<cln::cl_RA, FLOAT_T<mpq_class>>(const cln::cl_RA& n) {
114  return FLOAT_T<mpq_class>(convert<cln::cl_RA, mpq_class>(n));
115  }
116 
117  #endif
118 
119 } // namespace carl
carl is the main namespace for the library.
mpq_class rationalize< mpq_class >(float n)
Definition: operations.h:203
mpq_class convert< double, mpq_class >(const double &n)
Definition: native.h:5
double to_double(const cln::cl_RA &n)
Converts the given fraction to a double.
Definition: operations.h:113
double convert< mpq_class, double >(const mpq_class &n)
Definition: native.h:10
Templated wrapper class which allows universal usage of different IEEE 754 implementations.
Definition: FLOAT_T.h:114