33 #ifndef _GLIBCXX_DECIMAL_IMPL
34 #define _GLIBCXX_DECIMAL_IMPL 1
36 #pragma GCC system_header
42 _GLIBCXX_BEGIN_NAMESPACE_VERSION
46 inline decimal32::decimal32(decimal64 __r) : __val(__r.__getval()) {}
47 inline decimal32::decimal32(decimal128 __r) : __val(__r.__getval()) {}
48 inline decimal64::decimal64(decimal32 __r) : __val(__r.__getval()) {}
49 inline decimal64::decimal64(decimal128 __r) : __val(__r.__getval()) {}
50 inline decimal128::decimal128(decimal32 __r) : __val(__r.__getval()) {}
51 inline decimal128::decimal128(decimal64 __r) : __val(__r.__getval()) {}
55 #define _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_DEC(_Op1, _Op2, _T1, _T2) \
56 inline _T1& _T1::operator _Op1(_T2 __rhs) \
58 __setval(__getval() _Op2 __rhs.__getval()); \
62 #define _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_INT(_Op1, _Op2, _T1, _T2) \
63 inline _T1& _T1::operator _Op1(_T2 __rhs) \
65 __setval(__getval() _Op2 __rhs); \
69 #define _DEFINE_DECIMAL_COMPOUND_ASSIGNMENTS(_Op1, _Op2, _T1) \
70 _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_DEC(_Op1, _Op2, _T1, decimal32) \
71 _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_DEC(_Op1, _Op2, _T1, decimal64) \
72 _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_DEC(_Op1, _Op2, _T1, decimal128) \
73 _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_INT(_Op1, _Op2, _T1, int) \
74 _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_INT(_Op1, _Op2, _T1, unsigned int) \
75 _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_INT(_Op1, _Op2, _T1, long) \
76 _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_INT(_Op1, _Op2, _T1, unsigned long)\
77 _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_INT(_Op1, _Op2, _T1, long long) \
78 _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_INT(_Op1, _Op2, _T1, unsigned long long)
95 #undef _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_DEC
96 #undef _DEFINE_DECIMAL_COMPOUND_ASSIGNMENT_INT
97 #undef _DEFINE_DECIMAL_COMPOUND_ASSIGNMENTS
101 inline long long decimal32_to_long_long(decimal32 __d)
102 {
return (
long long)__d.__getval(); }
104 inline long long decimal64_to_long_long(decimal64 __d)
105 {
return (
long long)__d.__getval(); }
107 inline long long decimal128_to_long_long(decimal128 __d)
108 {
return (
long long)__d.__getval(); }
110 inline long long decimal_to_long_long(decimal32 __d)
111 {
return (
long long)__d.__getval(); }
113 inline long long decimal_to_long_long(decimal64 __d)
114 {
return (
long long)__d.__getval(); }
116 inline long long decimal_to_long_long(decimal128 __d)
117 {
return (
long long)__d.__getval(); }
121 static decimal32 make_decimal32(
long long __coeff,
int __exponent)
123 decimal32 __decexp = 1, __multiplier;
127 __multiplier = 1.E-1DF;
128 __exponent = -__exponent;
131 __multiplier = 1.E1DF;
133 for (
int __i = 0; __i < __exponent; ++__i)
134 __decexp *= __multiplier;
136 return __coeff * __decexp;
139 static decimal32 make_decimal32(
unsigned long long __coeff,
int __exponent)
141 decimal32 __decexp = 1, __multiplier;
145 __multiplier = 1.E-1DF;
146 __exponent = -__exponent;
149 __multiplier = 1.E1DF;
151 for (
int __i = 0; __i < __exponent; ++__i)
152 __decexp *= __multiplier;
154 return __coeff * __decexp;
157 static decimal64 make_decimal64(
long long __coeff,
int __exponent)
159 decimal64 __decexp = 1, __multiplier;
163 __multiplier = 1.E-1DD;
164 __exponent = -__exponent;
167 __multiplier = 1.E1DD;
169 for (
int __i = 0; __i < __exponent; ++__i)
170 __decexp *= __multiplier;
172 return __coeff * __decexp;
175 static decimal64 make_decimal64(
unsigned long long __coeff,
int __exponent)
177 decimal64 __decexp = 1, __multiplier;
181 __multiplier = 1.E-1DD;
182 __exponent = -__exponent;
185 __multiplier = 1.E1DD;
187 for (
int __i = 0; __i < __exponent; ++__i)
188 __decexp *= __multiplier;
190 return __coeff * __decexp;
193 static decimal128 make_decimal128(
long long __coeff,
int __exponent)
195 decimal128 __decexp = 1, __multiplier;
199 __multiplier = 1.E-1DL;
200 __exponent = -__exponent;
203 __multiplier = 1.E1DL;
205 for (
int __i = 0; __i < __exponent; ++__i)
206 __decexp *= __multiplier;
208 return __coeff * __decexp;
211 static decimal128 make_decimal128(
unsigned long long __coeff,
int __exponent)
213 decimal128 __decexp = 1, __multiplier;
217 __multiplier = 1.E-1DL;
218 __exponent = -__exponent;
221 __multiplier = 1.E1DL;
223 for (
int __i = 0; __i < __exponent; ++__i)
224 __decexp *= __multiplier;
226 return __coeff * __decexp;
231 inline float decimal32_to_float(decimal32 __d)
232 {
return (
float)__d.__getval(); }
234 inline float decimal64_to_float(decimal64 __d)
235 {
return (
float)__d.__getval(); }
237 inline float decimal128_to_float(decimal128 __d)
238 {
return (
float)__d.__getval(); }
240 inline float decimal_to_float(decimal32 __d)
241 {
return (
float)__d.__getval(); }
243 inline float decimal_to_float(decimal64 __d)
244 {
return (
float)__d.__getval(); }
246 inline float decimal_to_float(decimal128 __d)
247 {
return (
float)__d.__getval(); }
249 inline double decimal32_to_double(decimal32 __d)
250 {
return (
double)__d.__getval(); }
252 inline double decimal64_to_double(decimal64 __d)
253 {
return (
double)__d.__getval(); }
255 inline double decimal128_to_double(decimal128 __d)
256 {
return (
double)__d.__getval(); }
258 inline double decimal_to_double(decimal32 __d)
259 {
return (
double)__d.__getval(); }
261 inline double decimal_to_double(decimal64 __d)
262 {
return (
double)__d.__getval(); }
264 inline double decimal_to_double(decimal128 __d)
265 {
return (
double)__d.__getval(); }
267 inline long double decimal32_to_long_double(decimal32 __d)
268 {
return (
long double)__d.__getval(); }
270 inline long double decimal64_to_long_double(decimal64 __d)
271 {
return (
long double)__d.__getval(); }
273 inline long double decimal128_to_long_double(decimal128 __d)
274 {
return (
long double)__d.__getval(); }
276 inline long double decimal_to_long_double(decimal32 __d)
277 {
return (
long double)__d.__getval(); }
279 inline long double decimal_to_long_double(decimal64 __d)
280 {
return (
long double)__d.__getval(); }
282 inline long double decimal_to_long_double(decimal128 __d)
283 {
return (
long double)__d.__getval(); }
287 #define _DEFINE_DECIMAL_UNARY_OP(_Op, _Tp) \
288 inline _Tp operator _Op(_Tp __rhs) \
291 __tmp.__setval(_Op __rhs.__getval()); \
302 #undef _DEFINE_DECIMAL_UNARY_OP
306 #define _DEFINE_DECIMAL_BINARY_OP_WITH_DEC(_Op, _T1, _T2, _T3) \
307 inline _T1 operator _Op(_T2 __lhs, _T3 __rhs) \
310 __retval.__setval(__lhs.__getval() _Op __rhs.__getval()); \
314 #define _DEFINE_DECIMAL_BINARY_OP_BOTH(_Op, _T1, _T2, _T3) \
315 inline _T1 operator _Op(_T2 __lhs, _T3 __rhs) \
318 __retval.__setval(__lhs.__getval() _Op __rhs.__getval()); \
322 #define _DEFINE_DECIMAL_BINARY_OP_LHS(_Op, _T1, _T2) \
323 inline _T1 operator _Op(_T1 __lhs, _T2 __rhs) \
326 __retval.__setval(__lhs.__getval() _Op __rhs); \
330 #define _DEFINE_DECIMAL_BINARY_OP_RHS(_Op, _T1, _T2) \
331 inline _T1 operator _Op(_T2 __lhs, _T1 __rhs) \
334 __retval.__setval(__lhs _Op __rhs.__getval()); \
338 #define _DEFINE_DECIMAL_BINARY_OP_WITH_INT(_Op, _T1) \
339 _DEFINE_DECIMAL_BINARY_OP_LHS(_Op, _T1, int); \
340 _DEFINE_DECIMAL_BINARY_OP_LHS(_Op, _T1, unsigned int); \
341 _DEFINE_DECIMAL_BINARY_OP_LHS(_Op, _T1, long); \
342 _DEFINE_DECIMAL_BINARY_OP_LHS(_Op, _T1, unsigned long); \
343 _DEFINE_DECIMAL_BINARY_OP_LHS(_Op, _T1, long long); \
344 _DEFINE_DECIMAL_BINARY_OP_LHS(_Op, _T1, unsigned long long); \
345 _DEFINE_DECIMAL_BINARY_OP_RHS(_Op, _T1, int); \
346 _DEFINE_DECIMAL_BINARY_OP_RHS(_Op, _T1, unsigned int); \
347 _DEFINE_DECIMAL_BINARY_OP_RHS(_Op, _T1, long); \
348 _DEFINE_DECIMAL_BINARY_OP_RHS(_Op, _T1, unsigned long); \
349 _DEFINE_DECIMAL_BINARY_OP_RHS(_Op, _T1, long long); \
350 _DEFINE_DECIMAL_BINARY_OP_RHS(_Op, _T1, unsigned long long); \
404 #undef _DEFINE_DECIMAL_BINARY_OP_WITH_DEC
405 #undef _DEFINE_DECIMAL_BINARY_OP_BOTH
406 #undef _DEFINE_DECIMAL_BINARY_OP_LHS
407 #undef _DEFINE_DECIMAL_BINARY_OP_RHS
408 #undef _DEFINE_DECIMAL_BINARY_OP_WITH_INT
412 #define _DEFINE_DECIMAL_COMPARISON_BOTH(_Op, _T1, _T2) \
413 inline bool operator _Op(_T1 __lhs, _T2 __rhs) \
414 { return __lhs.__getval() _Op __rhs.__getval(); }
416 #define _DEFINE_DECIMAL_COMPARISON_LHS(_Op, _T1, _T2) \
417 inline bool operator _Op(_T1 __lhs, _T2 __rhs) \
418 { return __lhs.__getval() _Op __rhs; }
420 #define _DEFINE_DECIMAL_COMPARISON_RHS(_Op, _T1, _T2) \
421 inline bool operator _Op(_T1 __lhs, _T2 __rhs) \
422 { return __lhs _Op __rhs.__getval(); }
424 #define _DEFINE_DECIMAL_COMPARISONS(_Op, _Tp) \
425 _DEFINE_DECIMAL_COMPARISON_BOTH(_Op, _Tp, decimal32) \
426 _DEFINE_DECIMAL_COMPARISON_BOTH(_Op, _Tp, decimal64) \
427 _DEFINE_DECIMAL_COMPARISON_BOTH(_Op, _Tp, decimal128) \
428 _DEFINE_DECIMAL_COMPARISON_LHS(_Op, _Tp, int) \
429 _DEFINE_DECIMAL_COMPARISON_LHS(_Op, _Tp, unsigned int) \
430 _DEFINE_DECIMAL_COMPARISON_LHS(_Op, _Tp, long) \
431 _DEFINE_DECIMAL_COMPARISON_LHS(_Op, _Tp, unsigned long) \
432 _DEFINE_DECIMAL_COMPARISON_LHS(_Op, _Tp, long long) \
433 _DEFINE_DECIMAL_COMPARISON_LHS(_Op, _Tp, unsigned long long) \
434 _DEFINE_DECIMAL_COMPARISON_RHS(_Op, int, _Tp) \
435 _DEFINE_DECIMAL_COMPARISON_RHS(_Op, unsigned int, _Tp) \
436 _DEFINE_DECIMAL_COMPARISON_RHS(_Op, long, _Tp) \
437 _DEFINE_DECIMAL_COMPARISON_RHS(_Op, unsigned long, _Tp) \
438 _DEFINE_DECIMAL_COMPARISON_RHS(_Op, long long, _Tp) \
439 _DEFINE_DECIMAL_COMPARISON_RHS(_Op, unsigned long long, _Tp)
460 #undef _DEFINE_DECIMAL_COMPARISON_BOTH
461 #undef _DEFINE_DECIMAL_COMPARISON_LHS
462 #undef _DEFINE_DECIMAL_COMPARISON_RHS
463 #undef _DEFINE_DECIMAL_COMPARISONS
464 _GLIBCXX_END_NAMESPACE_VERSION
#define _DEFINE_DECIMAL_UNARY_OP(_Op, _Tp)
#define _DEFINE_DECIMAL_BINARY_OP_WITH_INT(_Op, _T1)
namespace std _GLIBCXX_VISIBILITY(default)
Definition: decimal.h:38
#define _DEFINE_DECIMAL_COMPARISONS(_Op, _Tp)
#define _DEFINE_DECIMAL_COMPOUND_ASSIGNMENTS(_Op1, _Op2, _T1)
#define _DEFINE_DECIMAL_BINARY_OP_WITH_DEC(_Op, _T1, _T2, _T3)