]> www.ginac.de Git - ginac.git/blobdiff - ginac/numeric.cpp
Change www.ginac.de urls to https.
[ginac.git] / ginac / numeric.cpp
index f7c4cb04aa8cc96b3fb6b653664c48e6bf675c94..ff5d510ca39023a8aa8262ee1cc021bf6bd916ec 100644 (file)
@@ -7,7 +7,7 @@
  *  of special functions or implement the interface to the bignum package. */
 
 /*
- *  GiNaC Copyright (C) 1999-2016 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2020 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
@@ -89,7 +89,7 @@ numeric::numeric()
 numeric::numeric(int i)
 {
        // Not the whole int-range is available if we don't cast to long
-       // first.  This is due to the behaviour of the cl_I-ctor, which
+       // first.  This is due to the behavior of the cl_I-ctor, which
        // emphasizes efficiency.  However, if the integer is small enough
        // we save space and dereferences by using an immediate type.
        // (C.f. <cln/object.h>)
@@ -110,7 +110,7 @@ numeric::numeric(int i)
 numeric::numeric(unsigned int i)
 {
        // Not the whole uint-range is available if we don't cast to ulong
-       // first.  This is due to the behaviour of the cl_I-ctor, which
+       // first.  This is due to the behavior of the cl_I-ctor, which
        // emphasizes efficiency.  However, if the integer is small enough
        // we save space and dereferences by using an immediate type.
        // (C.f. <cln/object.h>)
@@ -141,6 +141,17 @@ numeric::numeric(unsigned long i)
        setflag(status_flags::evaluated | status_flags::expanded);
 }
 
+numeric::numeric(long long i)
+{
+       value = cln::cl_I(i);
+       setflag(status_flags::evaluated | status_flags::expanded);
+}
+
+numeric::numeric(unsigned long long i)
+{
+       value = cln::cl_I(i);
+       setflag(status_flags::evaluated | status_flags::expanded);
+}
 
 /** Constructor for rational numerics a/b.
  *
@@ -442,7 +453,7 @@ static void print_real_csrc(const print_context & c, const cln::cl_R & x)
                // Rational number
                const cln::cl_I numer = cln::numerator(cln::the<cln::cl_RA>(x));
                const cln::cl_I denom = cln::denominator(cln::the<cln::cl_RA>(x));
-               if (cln::plusp(x) > 0) {
+               if (cln::plusp(x)) {
                        c.s << "(";
                        print_integer_csrc(c, numer);
                } else {
@@ -466,7 +477,7 @@ static inline bool coerce(T1& dst, const T2& arg);
 /** 
  * @brief Check if CLN integer can be converted into int
  *
- * @sa http://www.ginac.de/pipermail/cln-list/2006-October/000248.html
+ * @sa https://www.ginac.de/pipermail/cln-list/2006-October/000248.html
  */
 template<>
 inline bool coerce<int, cln::cl_I>(int& dst, const cln::cl_I& arg)
@@ -506,7 +517,7 @@ static void print_real_cl_N(const print_context & c, const cln::cl_R & x)
                if (coerce(dst, cln::the<cln::cl_I>(x))) {
                        // can be converted to native int
                        if (dst < 0)
-                               c.s << "(-" << dst << ")";
+                               c.s << '(' << dst << ')';
                        else
                                c.s << dst;
                } else {
@@ -784,11 +795,9 @@ ex numeric::eval() const
  *  currently set.  In case the object already was a floating point number the
  *  precision is trimmed to match the currently set default.
  *
- *  @param level  ignored, only needed for overriding basic::evalf.
  *  @return  an ex-handle to a numeric. */
-ex numeric::evalf(int level) const
+ex numeric::evalf() const
 {
-       // level can safely be discarded for numeric objects.
        return numeric(cln::cl_float(1.0, cln::default_float_format) * value);
 }
 
@@ -1741,7 +1750,7 @@ class lanczos_coeffs
                std::vector<cln::cl_N> *current_vector;
 };
 
-std::vector<cln::cl_N>* lanczos_coeffs::coeffs = 0;
+std::vector<cln::cl_N>* lanczos_coeffs::coeffs = nullptr;
 
 bool lanczos_coeffs::sufficiently_accurate(int digits)
 {      if (digits<=20) {
@@ -2219,7 +2228,7 @@ const numeric bernoulli(const numeric &nn)
 
        results.reserve(n/2);
        for (unsigned p=next_r; p<=n;  p+=2) {
-               cln::cl_I  c = 1;  // seed for binonmial coefficients
+               cln::cl_I  c = 1;  // seed for binomial coefficients
                cln::cl_RA b = cln::cl_RA(p-1)/-2;
                // The CLN manual says: "The conversion from `unsigned int' works only
                // if the argument is < 2^29" (This is for 32 Bit machines. More