19 #ifndef _KNUMBER_PRIV_H 20 #define _KNUMBER_PRIV_H 29 #define INFINITY HUGE_VAL 33 #define NAN (atof("nan")) 39 enum NumType {SpecialType, IntegerType, FractionType, FloatType};
40 enum ErrorType {UndefinedNumber, Infinity, MinusInfinity};
44 virtual ~_knumber() {}
46 virtual void copy(_knumber
const & num) = 0;
48 virtual NumType type(
void)
const = 0;
50 virtual TQString
const ascii(
int prec = -1)
const = 0;
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;
63 virtual _knumber * power(_knumber
const & exponent)
const = 0;
65 virtual int compare(_knumber
const &arg2)
const = 0;
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;
74 class _knumerror :
public _knumber
77 _knumerror(ErrorType error = UndefinedNumber)
80 _knumerror(_knumber
const & num);
82 _knumerror(
const TQString & num);
86 _knumerror
const & operator = (_knumerror
const & num);
88 virtual void copy(_knumber
const & num)
90 _error =
dynamic_cast<_knumerror
const &
>(num)._error;
93 virtual NumType type(
void)
const {
return SpecialType;}
95 virtual TQString
const ascii(
int prec = -1)
const;
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;
107 virtual _knumber * power(_knumber
const & exponent)
const;
109 virtual int compare(_knumber
const &arg2)
const;
111 virtual operator signed long int (
void)
const;
112 virtual operator unsigned long int (
void)
const;
113 virtual operator double (
void)
const;
119 friend class _knuminteger;
120 friend class _knumfraction;
121 friend class _knumfloat;
126 class _knuminteger :
public _knumber
129 _knuminteger(
signed int num = 0)
131 mpz_init_set_si(_mpz, num);
134 _knuminteger(
unsigned int num)
136 mpz_init_set_ui(_mpz, num);
139 _knuminteger(
signed long int num)
141 mpz_init_set_si(_mpz, num);
144 _knuminteger(
unsigned long int num)
146 mpz_init_set_ui(_mpz, num);
149 _knuminteger(
unsigned long long int num);
151 _knuminteger(_knumber
const & num);
153 _knuminteger(
const TQString & num);
155 virtual ~_knuminteger()
160 _knuminteger
const & operator = (_knuminteger
const & num);
162 virtual void copy(_knumber
const & num)
164 mpz_set(_mpz, dynamic_cast<_knuminteger const &>(num)._mpz);
167 virtual NumType type(
void)
const {
return IntegerType;}
169 virtual TQString
const ascii(
int prec = -1)
const;
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;
181 virtual int compare(_knumber
const &arg2)
const;
183 virtual _knumber * power(_knumber
const & exponent)
const;
185 virtual operator signed long int (
void)
const;
186 virtual operator unsigned long int (
void)
const;
187 virtual operator double (
void)
const;
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;
197 friend class _knumfraction;
198 friend class _knumfloat;
203 class _knumfraction :
public _knumber
207 _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(TQString
const & num);
218 virtual ~_knumfraction()
223 virtual void copy(_knumber
const & num)
225 mpq_set(_mpq, dynamic_cast<_knumfraction const &>(num)._mpq);
228 virtual NumType type(
void)
const {
return FractionType;}
230 virtual TQString
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 * 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;
244 virtual _knumber * power(_knumber
const & exponent)
const;
246 virtual int compare(_knumber
const &arg2)
const;
248 virtual operator signed long int (
void)
const;
249 virtual operator unsigned long int (
void)
const;
250 virtual operator double (
void)
const;
255 friend class _knuminteger;
256 friend class _knumfloat;
259 class _knumfloat :
public _knumber
262 _knumfloat(
double num = 1.0)
265 mpf_set_d(_mpf, num);
268 _knumfloat(_knumber
const & num);
270 _knumfloat(TQString
const & num);
272 virtual ~_knumfloat()
277 virtual void copy(_knumber
const & num)
279 mpf_set(_mpf, dynamic_cast<_knumfloat const &>(num)._mpf);
282 virtual NumType type(
void)
const {
return FloatType;}
284 virtual TQString
const ascii(
int prec = -1)
const;
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;
297 virtual _knumber * power(_knumber
const & exponent)
const;
299 virtual int compare(_knumber
const &arg2)
const;
301 virtual operator signed long int (
void)
const;
302 virtual operator unsigned long int (
void)
const;
303 virtual operator double (
void)
const;
308 friend class _knuminteger;
309 friend class _knumfraction;
313 #endif // _KNUMBER_PRIV_H