--- ginac/numeric.h 2000/01/24 19:12:31 1.20 +++ ginac/numeric.h 2000/04/03 18:02:17 1.32 @@ -24,15 +24,15 @@ #define __GINAC_NUMERIC_H__ #include -#include -#include +#include "basic.h" +#include "ex.h" class cl_N; // We want to include cln.h only in numeric.cpp in order to // avoid namespace pollution and keep compile-time low. -#ifndef NO_GINAC_NAMESPACE +#ifndef NO_NAMESPACE_GINAC namespace GiNaC { -#endif // ndef NO_GINAC_NAMESPACE +#endif // ndef NO_NAMESPACE_GINAC #define HASHVALUE_NUMERIC 0x80000001U @@ -83,6 +83,7 @@ friend const numeric atanh(const numeric & x); friend const numeric zeta(const numeric & x); friend const numeric bernoulli(const numeric & n); + friend const numeric fibonacci(const numeric & n); friend numeric abs(const numeric & x); friend numeric mod(const numeric & a, const numeric & b); friend numeric smod(const numeric & a, const numeric & b); @@ -117,8 +118,8 @@ explicit numeric(long numer, long denom); explicit numeric(double d); explicit numeric(const char *); - numeric(cl_N const & z); - + numeric(const cl_N & z); + // functions overriding virtual functions from bases classes public: basic * duplicate() const; @@ -127,19 +128,18 @@ void printtree(ostream & os, unsigned indent) const; void printcsrc(ostream & os, unsigned type, unsigned precedence=0) const; bool info(unsigned inf) const; + bool has(const ex & other) const; + ex eval(int level=0) const; ex evalf(int level=0) const; - ex diff(const symbol & s) const; ex normal(lst &sym_lst, lst &repl_lst, int level=0) const; numeric integer_content(void) const; ex smod(const numeric &xi) const; numeric max_coefficient(void) const; protected: + ex derivative(const symbol & s) const; int compare_same_type(const basic & other) const; bool is_equal_same_type(const basic & other) const; - unsigned calchash(void) const { - hashvalue=HASHVALUE_NUMERIC; - return HASHVALUE_NUMERIC; - } + unsigned calchash(void) const; // new virtual functions which can be overridden by derived classes // (none) @@ -188,10 +188,10 @@ int to_int(void) const; long to_long(void) const; double to_double(void) const; - numeric real(void) const; - numeric imag(void) const; - numeric numer(void) const; - numeric denom(void) const; + const numeric real(void) const; + const numeric imag(void) const; + const numeric numer(void) const; + const numeric denom(void) const; int int_length(void) const; // member variables @@ -208,9 +208,12 @@ extern const type_info & typeid_numeric; extern _numeric_digits Digits; -#define is_a_numeric_hash(x) ((x)==HASHVALUE_NUMERIC) +//#define is_a_numeric_hash(x) ((x)==HASHVALUE_NUMERIC) // may have to be changed to ((x)>=0x80000000U) +// has been changed +//#define is_a_numeric_hash(x) ((x)&0x80000000U) + // global functions const numeric exp(const numeric & x); @@ -229,7 +232,8 @@ const numeric acosh(const numeric & x); const numeric atanh(const numeric & x); const numeric zeta(const numeric & x); -const numeric gamma(const numeric & x); +const numeric lgamma(const numeric & x); +const numeric tgamma(const numeric & x); const numeric psi(const numeric & x); const numeric psi(const numeric & n, const numeric & x); const numeric factorial(const numeric & n); @@ -265,7 +269,7 @@ inline numeric inverse(const numeric & x) { return x.inverse(); } -inline bool csgn(const numeric & x) +inline int csgn(const numeric & x) { return x.csgn(); } inline bool is_zero(const numeric & x) @@ -304,32 +308,34 @@ inline bool is_crational(const numeric & x) { return x.is_crational(); } -inline numeric real(const numeric & x) +inline const numeric real(const numeric & x) { return x.real(); } -inline numeric imag(const numeric & x) +inline const numeric imag(const numeric & x) { return x.imag(); } -inline numeric numer(const numeric & x) +inline const numeric numer(const numeric & x) { return x.numer(); } -inline numeric denom(const numeric & x) +inline const numeric denom(const numeric & x) { return x.denom(); } // numeric evaluation functions for class constant objects: ex PiEvalf(void); -ex EulerGammaEvalf(void); +ex EulerEvalf(void); ex CatalanEvalf(void); + // utility functions inline const numeric &ex_to_numeric(const ex &e) { return static_cast(*e.bp); } -#ifndef NO_GINAC_NAMESPACE + +#ifndef NO_NAMESPACE_GINAC } // namespace GiNaC -#endif // ndef NO_GINAC_NAMESPACE +#endif // ndef NO_NAMESPACE_GINAC #endif // ndef __GINAC_NUMERIC_H__