• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • kcalc/knumber
 

kcalc/knumber

  • kcalc
  • knumber
knumber_priv.h
1/* This file is part of the KDE libraries
2 Copyright (C) 2005 Klaus Niederkrueger <kniederk@math.uni-koeln.de>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18*/
19#ifndef _KNUMBER_PRIV_H
20#define _KNUMBER_PRIV_H
21
22class TQString;
23
24#include <cstdio>
25#include <gmp.h>
26
27// work-around for pre-C99-libs
28#ifndef INFINITY
29#define INFINITY HUGE_VAL
30#endif
31// this is really ugly
32#ifndef NAN
33#define NAN (atof("nan"))
34#endif
35
36class _knumber
37{
38 public:
39 enum NumType {SpecialType, IntegerType, FractionType, FloatType};
40 enum ErrorType {UndefinedNumber, Infinity, MinusInfinity};
41
42 _knumber() {}
43
44 virtual ~_knumber() {}
45
46 virtual void copy(_knumber const & num) = 0;
47
48 virtual NumType type(void) const = 0;
49
50 virtual TQString const ascii(int prec = -1) const = 0;
51
52 virtual _knumber * abs(void) const = 0;
53 virtual _knumber * intPart(void) const = 0;
54 virtual int sign(void) const = 0;
55 virtual _knumber * sqrt(void) const = 0;
56 virtual _knumber * cbrt(void) const = 0;
57 virtual _knumber * change_sign(void) const = 0;
58 virtual _knumber * reciprocal(void) const = 0;
59 virtual _knumber * add(_knumber const & arg2) const = 0;
60 virtual _knumber * multiply(_knumber const & arg2) const = 0;
61 _knumber * divide(_knumber const & arg2) const;
62
63 virtual _knumber * power(_knumber const & exponent) const = 0;
64
65 virtual int compare(_knumber const &arg2) const = 0;
66
67 virtual operator signed long int (void) const = 0;
68 virtual operator unsigned long int (void) const = 0;
69 virtual operator double (void) const = 0;
70};
71
72
73
74class _knumerror : public _knumber
75{
76 public:
77 _knumerror(ErrorType error = UndefinedNumber)
78 : _error(error) { }
79
80 _knumerror(_knumber const & num);
81
82 _knumerror(const TQString & num);
83
84 //virtual ~_knumerror() { }
85
86 _knumerror const & operator = (_knumerror const & num);
87
88 virtual void copy(_knumber const & num)
89 {
90 _error = dynamic_cast<_knumerror const &>(num)._error;
91 }
92
93 virtual NumType type(void) const {return SpecialType;}
94
95 virtual TQString const ascii(int prec = -1) const;
96
97 virtual _knumber * abs(void) const;
98 virtual _knumber * intPart(void) const;
99 virtual int sign(void) const;
100 virtual _knumber * cbrt(void) const;
101 virtual _knumber * sqrt(void) const;
102 virtual _knumber * change_sign(void) const;
103 virtual _knumber * reciprocal(void) const;
104 virtual _knumber * add(_knumber const & arg2) const;
105 virtual _knumber * multiply(_knumber const & arg2) const;
106
107 virtual _knumber * power(_knumber const & exponent) const;
108
109 virtual int compare(_knumber const &arg2) const;
110
111 virtual operator signed long int (void) const;
112 virtual operator unsigned long int (void) const;
113 virtual operator double (void) const;
114
115 private:
116
117 ErrorType _error;
118
119 friend class _knuminteger;
120 friend class _knumfraction;
121 friend class _knumfloat;
122};
123
124
125
126class _knuminteger : public _knumber
127{
128 public:
129 _knuminteger(signed int num = 0)
130 {
131 mpz_init_set_si(_mpz, num);
132 }
133
134 _knuminteger(unsigned int num)
135 {
136 mpz_init_set_ui(_mpz, num);
137 }
138
139 _knuminteger(signed long int num)
140 {
141 mpz_init_set_si(_mpz, num);
142 }
143
144 _knuminteger(unsigned long int num)
145 {
146 mpz_init_set_ui(_mpz, num);
147 }
148
149 _knuminteger(unsigned long long int num);
150
151 _knuminteger(_knumber const & num);
152
153 _knuminteger(const TQString & num);
154
155 virtual ~_knuminteger()
156 {
157 mpz_clear(_mpz);
158 }
159
160 _knuminteger const & operator = (_knuminteger const & num);
161
162 virtual void copy(_knumber const & num)
163 {
164 mpz_set(_mpz, dynamic_cast<_knuminteger const &>(num)._mpz);
165 }
166
167 virtual NumType type(void) const {return IntegerType;}
168
169 virtual TQString const ascii(int prec = -1) const;
170
171 virtual _knumber * abs(void) const;
172 virtual _knumber * intPart(void) const;
173 virtual int sign(void) const;
174 virtual _knumber * cbrt(void) const;
175 virtual _knumber * sqrt(void) const;
176 virtual _knumber * change_sign(void) const;
177 virtual _knumber * reciprocal(void) const;
178 virtual _knumber * add(_knumber const & arg2) const;
179 virtual _knumber * multiply(_knumber const & arg2) const;
180
181 virtual int compare(_knumber const &arg2) const;
182
183 virtual _knumber * power(_knumber const & exponent) const;
184
185 virtual operator signed long int (void) const;
186 virtual operator unsigned long int (void) const;
187 virtual operator double (void) const;
188
189 _knuminteger * intAnd(_knuminteger const &arg2) const;
190 _knuminteger * intOr(_knuminteger const &arg2) const;
191 _knumber * mod(_knuminteger const &arg2) const;
192 _knumber * shift(_knuminteger const &arg2) const;
193
194 private:
195 mpz_t _mpz;
196
197 friend class _knumfraction;
198 friend class _knumfloat;
199};
200
201
202
203class _knumfraction : public _knumber
204{
205 public:
206
207 _knumfraction(signed long int nom = 0, signed long int denom = 1)
208 {
209 mpq_init(_mpq);
210 mpq_set_si(_mpq, nom, denom);
211 mpq_canonicalize(_mpq);
212 }
213
214 _knumfraction(_knumber const & num);
215
216 _knumfraction(TQString const & num);
217
218 virtual ~_knumfraction()
219 {
220 mpq_clear(_mpq);
221 }
222
223 virtual void copy(_knumber const & num)
224 {
225 mpq_set(_mpq, dynamic_cast<_knumfraction const &>(num)._mpq);
226 }
227
228 virtual NumType type(void) const {return FractionType;}
229
230 virtual TQString const ascii(int prec = -1) const;
231
232 bool isInteger(void) const;
233
234 virtual _knumber * abs(void) const;
235 virtual _knumber * intPart(void) const;
236 virtual int sign(void) const;
237 virtual _knumber * cbrt(void) const;
238 virtual _knumber * sqrt(void) const;
239 virtual _knumber * change_sign(void) const;
240 virtual _knumber * reciprocal(void) const;
241 virtual _knumber * add(_knumber const & arg2) const;
242 virtual _knumber * multiply(_knumber const & arg2) const;
243
244 virtual _knumber * power(_knumber const & exponent) const;
245
246 virtual int compare(_knumber const &arg2) const;
247
248 virtual operator signed long int (void) const;
249 virtual operator unsigned long int (void) const;
250 virtual operator double (void) const;
251
252 private:
253 mpq_t _mpq;
254
255 friend class _knuminteger;
256 friend class _knumfloat;
257};
258
259class _knumfloat : public _knumber
260{
261 public:
262 _knumfloat(double num = 1.0)
263 {
264 mpf_init(_mpf);
265 mpf_set_d(_mpf, num);
266 }
267
268 _knumfloat(_knumber const & num);
269
270 _knumfloat(TQString const & num);
271
272 virtual ~_knumfloat()
273 {
274 mpf_clear(_mpf);
275 }
276
277 virtual void copy(_knumber const & num)
278 {
279 mpf_set(_mpf, dynamic_cast<_knumfloat const &>(num)._mpf);
280 }
281
282 virtual NumType type(void) const {return FloatType;}
283
284 virtual TQString const ascii(int prec = -1) const;
285
286 virtual _knumber * abs(void) const;
287 virtual _knumber * intPart(void) const;
288 virtual int sign(void) const;
289 virtual _knumber * cbrt(void) const;
290 virtual _knumber * sqrt(void) const;
291 virtual _knumber * change_sign(void) const;
292 virtual _knumber * reciprocal(void) const;
293 virtual _knumber * add(_knumber const & arg2) const;
294 virtual _knumber * multiply(_knumber const & arg2) const;
295 virtual _knumber * divide(_knumber const & arg2) const;
296
297 virtual _knumber * power(_knumber const & exponent) const;
298
299 virtual int compare(_knumber const &arg2) const;
300
301 virtual operator signed long int (void) const;
302 virtual operator unsigned long int (void) const;
303 virtual operator double (void) const;
304
305 private:
306 mpf_t _mpf;
307
308 friend class _knuminteger;
309 friend class _knumfraction;
310};
311
312
313#endif // _KNUMBER_PRIV_H

kcalc/knumber

Skip menu "kcalc/knumber"
  • Main Page
  • Alphabetical List
  • Class List
  • File List
  • Class Members

kcalc/knumber

Skip menu "kcalc/knumber"
  • kcalc
  •   knumber
  • superkaramba
Generated for kcalc/knumber by doxygen 1.9.4
This website is maintained by Timothy Pearson.