]> www.ginac.de Git - ginac.git/blobdiff - ginac/numeric.h
- Banned exZERO(), exONE(), exMINUSHALF() and all this from the interface.
[ginac.git] / ginac / numeric.h
index b8abb189d04d853f622952ac8b1c017084162416..27153df34a3a73209dfde67599daf84fcf9e187a 100644 (file)
@@ -1,7 +1,8 @@
 /** @file numeric.h
  *
- *  Makes the interface to the underlying bignum package available.
- *
+ *  Makes the interface to the underlying bignum package available. */
+
+/*
  *  GiNaC Copyright (C) 1999 Johannes Gutenberg University Mainz, Germany
  *
  *  This program is free software; you can redistribute it and/or modify
 
 #include <strstream>
 #include <ginac/basic.h>
-
-#define HASHVALUE_NUMERIC 0x80000001U
+#include <ginac/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
+namespace GiNaC {
+#endif // ndef NO_GINAC_NAMESPACE
+
+#define HASHVALUE_NUMERIC 0x80000001U
+
 /** This class is used to instantiate a global 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
@@ -73,6 +79,8 @@ class numeric : public basic
     friend numeric asinh(numeric const & x);
     friend numeric acosh(numeric const & x);
     friend numeric atanh(numeric const & x);
+    friend numeric zeta(numeric const & x);
+    friend numeric bernoulli(numeric const & n);
     friend numeric abs(numeric const & x);
     friend numeric mod(numeric const & a, numeric const & b);
     friend numeric smod(numeric const & a, numeric const & b);
@@ -84,12 +92,6 @@ class numeric : public basic
     friend numeric isqrt(numeric const & x);
     friend numeric gcd(numeric const & a, numeric const & b);
     friend numeric lcm(numeric const & a, numeric const & b);
-    friend numeric const & numZERO(void);
-    friend numeric const & numONE(void);
-    friend numeric const & numTWO(void);
-    friend numeric const & numTHREE(void);
-    friend numeric const & numMINUSONE(void);
-    friend numeric const & numHALF(void);
 
 // member functions
 
@@ -118,9 +120,9 @@ public:
     // functions overriding virtual functions from bases classes
 public:
     basic * duplicate() const;
+    void print(ostream & os, unsigned precedence=0) const;
     void printraw(ostream & os) const;
     void printtree(ostream & os, unsigned indent) const;
-    void print(ostream & os, unsigned precedence=0) const;
     void printcsrc(ostream & os, unsigned type, unsigned precedence=0) const;
     bool info(unsigned inf) const;
     ex evalf(int level=0) const;
@@ -166,6 +168,7 @@ public:
     numeric power_dyn(numeric const & other) const { return power(other); }
     */
     numeric inverse(void) const;
+    int csgn(void) const;
     int compare(numeric const & other) const;
     bool is_equal(numeric const & other) const;
     bool is_zero(void) const;
@@ -179,6 +182,8 @@ public:
     bool is_prime(void) const;
     bool is_rational(void) const;
     bool is_real(void) const;
+    bool is_cinteger(void) const;
+    bool is_crational(void) const;
     bool operator==(numeric const & other) const;
     bool operator!=(numeric const & other) const;
     bool operator<(numeric const & other) const;
@@ -212,12 +217,6 @@ extern _numeric_digits Digits;
 
 // global functions
 
-numeric const & numZERO(void);
-numeric const & numONE(void);
-numeric const & numTWO(void);
-numeric const & numMINUSONE(void);
-numeric const & numHALF(void);
-
 numeric exp(numeric const & x);
 numeric log(numeric const & x);
 numeric sin(numeric const & x);
@@ -233,10 +232,14 @@ numeric tanh(numeric const & x);
 numeric asinh(numeric const & x);
 numeric acosh(numeric const & x);
 numeric atanh(numeric const & x);
+numeric zeta(numeric const & x);
 numeric gamma(numeric const & x);
+numeric psi(numeric const & x);
+numeric psi(numeric const & n, numeric const & x);
 numeric factorial(numeric const & n);
 numeric doublefactorial(numeric const & n);
 numeric binomial(numeric const & n, numeric const & k);
+numeric bernoulli(numeric const & n);
 
 numeric abs(numeric const & x);
 numeric mod(numeric const & a, numeric const & b);
@@ -262,6 +265,9 @@ struct numeric_fail
 inline numeric inverse(numeric const & x)
 { return x.inverse(); }
 
+inline bool csgn(numeric const & x)
+{ return x.csgn(); }
+
 inline bool is_zero(numeric const & x)
 { return x.is_zero(); }
 
@@ -292,6 +298,12 @@ inline bool is_rational(numeric const & x)
 inline bool is_real(numeric const & x)
 { return x.is_real(); }
 
+inline bool is_cinteger(numeric const & x)
+{ return x.is_cinteger(); }
+
+inline bool is_crational(numeric const & x)
+{ return x.is_crational(); }
+
 inline numeric real(numeric const & x)
 { return x.real(); }
 
@@ -304,20 +316,20 @@ inline numeric numer(numeric const & x)
 inline numeric denom(numeric const & x)
 { return x.denom(); }
 
-/* do we need this any more? */
-//inline numeric factorial(int n)
-//{ return factorial(numeric(n)); }
-
-/* do we need this any more? */
-//inline numeric binomial(int n, int k)
-//{ return binomial(numeric(n), numeric(k)); }
+// numeric evaluation functions for class constant objects:
 
-ex IEvalf(void);
 ex PiEvalf(void);
 ex EulerGammaEvalf(void);
 ex CatalanEvalf(void);
 
-#define ex_to_numeric(X) static_cast<numeric const &>(*(X).bp)
+// utility functions
+inline const numeric &ex_to_numeric(const ex &e)
+{
+    return static_cast<const numeric &>(*e.bp);
+}
 
+#ifndef NO_GINAC_NAMESPACE
+} // namespace GiNaC
+#endif // ndef NO_GINAC_NAMESPACE
 
 #endif // ndef __GINAC_NUMERIC_H__