X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fnumeric.h;h=3c7dba2c37aee6b178a978bd5088bed3b104aa7a;hp=4c7fd0b33162ab7572f8de42a75e7ee0d3747e83;hb=e0909883f133a031a8931a0280f465e3c4d6ffea;hpb=0917777d60656298ba44e092712c2b403bfaf559 diff --git a/ginac/numeric.h b/ginac/numeric.h index 4c7fd0b3..3c7dba2c 100644 --- a/ginac/numeric.h +++ b/ginac/numeric.h @@ -3,7 +3,7 @@ * Makes the interface to the underlying bignum package available. */ /* - * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2002 Johannes Gutenberg University Mainz, Germany * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,8 +39,6 @@ namespace cln { class cl_N; } namespace GiNaC { -#define HASHVALUE_NUMERIC 0x80000001U - /** This class is used to instantiate a global singleton object Digits * which behaves just like Maple's Digits. We need an object rather * than a dumber basic type since as a side-effect we let it change @@ -74,19 +72,22 @@ class numeric : public basic // other ctors public: - explicit numeric(int i); - explicit numeric(unsigned int i); - explicit numeric(long i); - explicit numeric(unsigned long i); - explicit numeric(long numer, long denom); - explicit numeric(double d); - explicit numeric(const char *); + numeric(int i); + numeric(unsigned int i); + numeric(long i); + numeric(unsigned long i); + numeric(long numer, long denom); + numeric(double d); + numeric(const char *); - // functions overriding virtual functions from bases classes + // functions overriding virtual functions from base classes public: void print(const print_context & c, unsigned level = 0) const; unsigned precedence(void) const {return 30;} bool info(unsigned inf) const; + int degree(const ex & s) const; + int ldegree(const ex & s) const; + ex coeff(const ex & s, int n = 1) const; bool has(const ex &other) const; ex eval(int level = 0) const; ex evalf(int level = 0) const; @@ -98,7 +99,7 @@ public: protected: /** Implementation of ex::diff for a numeric always returns 0. * @see ex::diff */ - ex derivative(const symbol &s) const { return _ex0(); } + ex derivative(const symbol &s) const { return 0; } bool is_equal_same_type(const basic &other) const; unsigned calchash(void) const; @@ -287,9 +288,11 @@ ex CatalanEvalf(void); // utility functions -inline const numeric &ex_to_numeric(const ex &e) + +/** Specialization of is_exactly_a(obj) for numeric objects. */ +template<> inline bool is_exactly_a(const basic & obj) { - return static_cast(*e.bp); + return obj.tinfo()==TINFO_numeric; } } // namespace GiNaC