41
enum NumType {SpecialType, IntegerType, FractionType, FloatType};
42
enum ErrorType {UndefinedNumber, Infinity, MinusInfinity};
46
virtual ~_knumber() {}
48
virtual void copy(_knumber const & num) = 0;
50
virtual NumType type(void) const = 0;
52
virtual QString const ascii(int prec = -1) const = 0;
54
virtual _knumber * abs(void) const = 0;
55
virtual _knumber * intPart(void) const = 0;
56
virtual int sign(void) const = 0;
57
virtual _knumber * sqrt(void) const = 0;
58
virtual _knumber * cbrt(void) const = 0;
59
virtual _knumber * factorial(void) const = 0;
60
virtual _knumber * change_sign(void) const = 0;
61
virtual _knumber * reciprocal(void) const = 0;
62
virtual _knumber * add(_knumber const & arg2) const = 0;
63
virtual _knumber * multiply(_knumber const & arg2) const = 0;
64
_knumber * divide(_knumber const & arg2) const;
66
virtual _knumber * power(_knumber const & exponent) const = 0;
68
virtual int compare(_knumber const &arg2) const = 0;
70
virtual operator long int(void) const = 0;
71
virtual operator unsigned long int(void) const = 0;
72
virtual operator long long int(void) const = 0;
73
virtual operator unsigned long long int(void) const = 0;
74
virtual operator double (void) const = 0;
41
enum NumType {SpecialType, IntegerType, FractionType, FloatType};
42
enum ErrorType {UndefinedNumber, Infinity, MinusInfinity};
46
virtual ~_knumber() {}
48
virtual void copy(_knumber const & num) = 0;
50
virtual NumType type(void) const = 0;
52
virtual QString const ascii(int prec = -1) const = 0;
54
virtual _knumber * abs(void) const = 0;
55
virtual _knumber * intPart(void) const = 0;
56
virtual int sign(void) const = 0;
57
virtual _knumber * sqrt(void) const = 0;
58
virtual _knumber * cbrt(void) const = 0;
59
virtual _knumber * factorial(void) const = 0;
60
virtual _knumber * change_sign(void) const = 0;
61
virtual _knumber * reciprocal(void) const = 0;
62
virtual _knumber * add(_knumber const & arg2) const = 0;
63
virtual _knumber * multiply(_knumber const & arg2) const = 0;
64
_knumber * divide(_knumber const & arg2) const;
66
virtual _knumber * power(_knumber const & exponent) const = 0;
68
virtual int compare(_knumber const &arg2) const = 0;
70
virtual operator long int(void) const = 0;
71
virtual operator unsigned long int(void) const = 0;
72
virtual operator long long int(void) const = 0;
73
virtual operator unsigned long long int(void) const = 0;
74
virtual operator double(void) const = 0;
78
78
class _knumerror : public _knumber
81
_knumerror(ErrorType error = UndefinedNumber)
84
_knumerror(_knumber const & num);
86
_knumerror(const QString & num);
88
//virtual ~_knumerror() { }
90
_knumerror const & operator = (_knumerror const & num);
92
virtual void copy(_knumber const & num)
94
_error = dynamic_cast<_knumerror const &>(num)._error;
97
virtual NumType type(void) const {return SpecialType;}
99
virtual QString const ascii(int prec = -1) const;
101
virtual _knumber * abs(void) const;
102
virtual _knumber * intPart(void) const;
103
virtual int sign(void) const;
104
virtual _knumber * cbrt(void) const;
105
virtual _knumber * sqrt(void) const;
106
virtual _knumber * factorial(void) const;
107
virtual _knumber * change_sign(void) const;
108
virtual _knumber * reciprocal(void) const;
109
virtual _knumber * add(_knumber const & arg2) const;
110
virtual _knumber * multiply(_knumber const & arg2) const;
112
virtual _knumber * power(_knumber const & exponent) const;
114
virtual int compare(_knumber const &arg2) const;
116
virtual operator long int(void) const;
117
virtual operator unsigned long int(void) const;
118
virtual operator long long int(void) const;
119
virtual operator unsigned long long int(void) const;
120
virtual operator double (void) const;
126
friend class _knuminteger;
127
friend class _knumfraction;
128
friend class _knumfloat;
81
_knumerror(ErrorType error = UndefinedNumber)
84
_knumerror(_knumber const & num);
86
_knumerror(const QString & num);
88
//virtual ~_knumerror() { }
90
_knumerror const & operator = (_knumerror const & num);
92
virtual void copy(_knumber const & num) {
93
_error = dynamic_cast<_knumerror const &>(num)._error;
96
virtual NumType type(void) const {
100
virtual QString const ascii(int prec = -1) const;
102
virtual _knumber * abs(void) const;
103
virtual _knumber * intPart(void) const;
104
virtual int sign(void) const;
105
virtual _knumber * cbrt(void) const;
106
virtual _knumber * sqrt(void) const;
107
virtual _knumber * factorial(void) const;
108
virtual _knumber * change_sign(void) const;
109
virtual _knumber * reciprocal(void) const;
110
virtual _knumber * add(_knumber const & arg2) const;
111
virtual _knumber * multiply(_knumber const & arg2) const;
113
virtual _knumber * power(_knumber const & exponent) const;
115
virtual int compare(_knumber const &arg2) const;
117
virtual operator long int(void) const;
118
virtual operator unsigned long int(void) const;
119
virtual operator long long int(void) const;
120
virtual operator unsigned long long int(void) const;
121
virtual operator double(void) const;
127
friend class _knuminteger;
128
friend class _knumfraction;
129
friend class _knumfloat;
133
134
class _knuminteger : public _knumber
136
_knuminteger(qint32 num = 0)
138
mpz_init_set_si(_mpz, static_cast<signed long int>(num));
141
_knuminteger(quint32 num)
143
mpz_init_set_ui(_mpz, static_cast<unsigned long int>(num));
146
_knuminteger(qint64 num);
148
_knuminteger(quint64 num);
150
_knuminteger(_knumber const & num);
152
_knuminteger(const QString & num);
154
virtual ~_knuminteger()
159
_knuminteger const & operator = (_knuminteger const & num);
161
virtual void copy(_knumber const & num)
163
mpz_set(_mpz, dynamic_cast<_knuminteger const &>(num)._mpz);
166
virtual NumType type(void) const {return IntegerType;}
168
virtual QString const ascii(int prec = -1) const;
170
virtual _knumber * abs(void) const;
171
virtual _knumber * intPart(void) const;
172
virtual int sign(void) const;
173
virtual _knumber * cbrt(void) const;
174
virtual _knumber * sqrt(void) const;
175
virtual _knumber * factorial(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;
181
virtual int compare(_knumber const &arg2) const;
183
virtual _knumber * power(_knumber const & exponent) const;
185
virtual operator long int (void) const;
186
virtual operator unsigned long int (void) const;
187
virtual operator long long int(void) const;
188
virtual operator unsigned long long int(void) const;
189
virtual operator double (void) const;
191
_knuminteger * intAnd(_knuminteger const &arg2) const;
192
_knuminteger * intOr(_knuminteger const &arg2) const;
193
_knumber * mod(_knuminteger const &arg2) const;
194
_knumber * shift(_knuminteger const &arg2) const;
199
friend class _knumfraction;
200
friend class _knumfloat;
137
_knuminteger(qint32 num = 0) {
138
mpz_init_set_si(_mpz, static_cast<signed long int>(num));
141
_knuminteger(quint32 num) {
142
mpz_init_set_ui(_mpz, static_cast<unsigned long int>(num));
145
_knuminteger(qint64 num);
147
_knuminteger(quint64 num);
149
_knuminteger(_knumber const & num);
151
_knuminteger(const QString & num);
153
virtual ~_knuminteger() {
157
_knuminteger const & operator = (_knuminteger const & num);
159
virtual void copy(_knumber const & num) {
160
mpz_set(_mpz, dynamic_cast<_knuminteger const &>(num)._mpz);
163
virtual NumType type(void) const {
167
virtual QString const ascii(int prec = -1) const;
169
virtual _knumber * abs(void) const;
170
virtual _knumber * intPart(void) const;
171
virtual int sign(void) const;
172
virtual _knumber * cbrt(void) const;
173
virtual _knumber * sqrt(void) const;
174
virtual _knumber * factorial(void) const;
175
virtual _knumber * change_sign(void) const;
176
virtual _knumber * reciprocal(void) const;
177
virtual _knumber * add(_knumber const & arg2) const;
178
virtual _knumber * multiply(_knumber const & arg2) const;
180
virtual int compare(_knumber const &arg2) const;
182
virtual _knumber * power(_knumber const & exponent) const;
184
virtual operator long int (void) const;
185
virtual operator unsigned long int (void) const;
186
virtual operator long long int(void) const;
187
virtual operator unsigned long long int(void) const;
188
virtual operator double(void) const;
190
_knuminteger * intAnd(_knuminteger const &arg2) const;
191
_knuminteger * intOr(_knuminteger const &arg2) const;
192
_knumber * mod(_knuminteger const &arg2) const;
193
_knumber * shift(_knuminteger const &arg2) const;
198
friend class _knumfraction;
199
friend class _knumfloat;
205
204
class _knumfraction : public _knumber
209
explicit _knumfraction(signed long int nom = 0, signed long int denom = 1)
212
mpq_set_si(_mpq, nom, denom);
213
mpq_canonicalize(_mpq);
216
_knumfraction(_knumber const & num);
218
_knumfraction(QString const & num);
220
virtual ~_knumfraction()
225
virtual void copy(_knumber const & num)
227
mpq_set(_mpq, dynamic_cast<_knumfraction const &>(num)._mpq);
230
virtual NumType type(void) const {return FractionType;}
232
virtual QString const ascii(int prec = -1) const;
234
bool isInteger(void) const;
236
virtual _knumber * abs(void) const;
237
virtual _knumber * intPart(void) const;
238
virtual int sign(void) const;
239
virtual _knumber * cbrt(void) const;
240
virtual _knumber * sqrt(void) const;
241
virtual _knumber * factorial(void) const;
242
virtual _knumber * change_sign(void) const;
243
virtual _knumber * reciprocal(void) const;
244
virtual _knumber * add(_knumber const & arg2) const;
245
virtual _knumber * multiply(_knumber const & arg2) const;
247
virtual _knumber * power(_knumber const & exponent) const;
249
virtual int compare(_knumber const &arg2) const;
251
virtual operator long int (void) const;
252
virtual operator unsigned long int (void) const;
253
virtual operator long long int(void) const;
254
virtual operator unsigned long long int(void) const;
255
virtual operator double (void) const;
260
friend class _knuminteger;
261
friend class _knumfloat;
208
explicit _knumfraction(signed long int nom = 0, signed long int denom = 1) {
210
mpq_set_si(_mpq, nom, denom);
211
mpq_canonicalize(_mpq);
214
_knumfraction(_knumber const & num);
216
_knumfraction(QString const & num);
218
virtual ~_knumfraction() {
222
virtual void copy(_knumber const & num) {
223
mpq_set(_mpq, dynamic_cast<_knumfraction const &>(num)._mpq);
226
virtual NumType type(void) const {
230
virtual QString const ascii(int prec = -1) const;
232
bool isInteger(void) const;
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 * factorial(void) const;
240
virtual _knumber * change_sign(void) const;
241
virtual _knumber * reciprocal(void) const;
242
virtual _knumber * add(_knumber const & arg2) const;
243
virtual _knumber * multiply(_knumber const & arg2) const;
245
virtual _knumber * power(_knumber const & exponent) const;
247
virtual int compare(_knumber const &arg2) const;
249
virtual operator long int (void) const;
250
virtual operator unsigned long int (void) const;
251
virtual operator long long int(void) const;
252
virtual operator unsigned long long int(void) const;
253
virtual operator double(void) const;
258
friend class _knuminteger;
259
friend class _knumfloat;
264
262
class _knumfloat : public _knumber
267
_knumfloat(double num = 1.0)
270
mpf_set_d(_mpf, num);
273
_knumfloat(_knumber const & num);
275
_knumfloat(QString const & num);
277
virtual ~_knumfloat()
282
virtual void copy(_knumber const & num)
284
mpf_set(_mpf, dynamic_cast<_knumfloat const &>(num)._mpf);
287
virtual NumType type(void) const {return FloatType;}
289
virtual QString const ascii(int prec = -1) const;
291
virtual _knumber * abs(void) const;
292
virtual _knumber * intPart(void) const;
293
virtual int sign(void) const;
294
virtual _knumber * cbrt(void) const;
295
virtual _knumber * sqrt(void) const;
296
virtual _knumber * factorial(void) const;
297
virtual _knumber * change_sign(void) const;
298
virtual _knumber * reciprocal(void) const;
299
virtual _knumber * add(_knumber const & arg2) const;
300
virtual _knumber * multiply(_knumber const & arg2) const;
301
virtual _knumber * divide(_knumber const & arg2) const;
303
virtual _knumber * power(_knumber const & exponent) const;
305
virtual int compare(_knumber const &arg2) const;
307
virtual operator long int (void) const;
308
virtual operator unsigned long int (void) const;
309
virtual operator long long int(void) const;
310
virtual operator unsigned long long int(void) const;
311
virtual operator double (void) const;
265
_knumfloat(double num = 1.0) {
267
mpf_set_d(_mpf, num);
270
_knumfloat(_knumber const & num);
272
_knumfloat(QString const & num);
274
virtual ~_knumfloat() {
278
virtual void copy(_knumber const & num) {
279
mpf_set(_mpf, dynamic_cast<_knumfloat const &>(num)._mpf);
282
virtual NumType type(void) const {
286
virtual QString const ascii(int prec = -1) const;
288
virtual _knumber * abs(void) const;
289
virtual _knumber * intPart(void) const;
290
virtual int sign(void) const;
291
virtual _knumber * cbrt(void) const;
292
virtual _knumber * sqrt(void) const;
293
virtual _knumber * factorial(void) const;
294
virtual _knumber * change_sign(void) const;
295
virtual _knumber * reciprocal(void) const;
296
virtual _knumber * add(_knumber const & arg2) const;
297
virtual _knumber * multiply(_knumber const & arg2) const;
298
virtual _knumber * divide(_knumber const & arg2) const;
300
virtual _knumber * power(_knumber const & exponent) const;
302
virtual int compare(_knumber const &arg2) const;
304
virtual operator long int (void) const;
305
virtual operator unsigned long int (void) const;
306
virtual operator long long int(void) const;
307
virtual operator unsigned long long int(void) const;
308
virtual operator double(void) const;
316
friend class _knuminteger;
317
friend class _knumfraction;
313
friend class _knuminteger;
314
friend class _knumfraction;