1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/* 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Multi-precision real number class. C++ interface for MPFR library. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Project homepage: http://www.holoborodko.com/pavel/ 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Contact e-mail: pavel@holoborodko.com 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Copyright (c) 2008-2012 Pavel Holoborodko 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Core Developers: 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Pavel Holoborodko, Dmitriy Gubanov, Konstantin Holoborodko. 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Contributors: 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Brian Gladman, Helmut Jarausch, Fokko Beekhof, Ulrich Mutze, 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Heinz van Saanen, Pere Constans, Peter van Hoof, Gael Guennebaud, 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Tsai Chia Cheng, Alexei Zubanov. 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath **************************************************************************** 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath This library is free software; you can redistribute it and/or 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath modify it under the terms of the GNU Lesser General Public 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath License as published by the Free Software Foundation; either 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath version 2.1 of the License, or (at your option) any later version. 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath This library is distributed in the hope that it will be useful, 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath but WITHOUT ANY WARRANTY; without even the implied warranty of 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Lesser General Public License for more details. 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath You should have received a copy of the GNU Lesser General Public 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath License along with this library; if not, write to the Free Software 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath **************************************************************************** 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Redistribution and use in source and binary forms, with or without 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath modification, are permitted provided that the following conditions 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath are met: 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1. Redistributions of source code must retain the above copyright 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath notice, this list of conditions and the following disclaimer. 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2. Redistributions in binary form must reproduce the above copyright 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath notice, this list of conditions and the following disclaimer in the 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath documentation and/or other materials provided with the distribution. 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 3. The name of the author may be used to endorse or promote products 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath derived from this software without specific prior written permission. 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SUCH DAMAGE. 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath*/ 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef __MPREAL_H__ 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define __MPREAL_H__ 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <string> 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream> 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <sstream> 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <stdexcept> 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <cfloat> 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <cmath> 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Options 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define MPREAL_HAVE_INT64_SUPPORT // int64_t support: available only for MSVC 2010 & GCC 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define MPREAL_HAVE_MSVC_DEBUGVIEW // Enable Debugger Visualizer (valid only for MSVC in "Debug" builds) 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Detect compiler using signatures from http://predef.sourceforge.net/ 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined(__GNUC__) && defined(__INTEL_COMPILER) 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #define IsInf(x) isinf(x) // Intel ICC compiler on Linux 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#elif defined(_MSC_VER) // Microsoft Visual C++ 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #define IsInf(x) (!_finite(x)) 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#elif defined(__GNUC__) 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #define IsInf(x) std::isinf(x) // GNU C/C++ 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #define IsInf(x) std::isinf(x) // Unknown compiler, just hope for C99 conformance 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined(MPREAL_HAVE_INT64_SUPPORT) 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #define MPFR_USE_INTMAX_T // should be defined before mpfr.h 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #if defined(_MSC_VER) // <stdint.h> is available only in msvc2010! 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #if (_MSC_VER >= 1600) 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #include <stdint.h> 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #else // MPFR relies on intmax_t which is available only in msvc2010 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #undef MPREAL_HAVE_INT64_SUPPORT // Besides, MPFR - MPIR have to be compiled with msvc2010 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #undef MPFR_USE_INTMAX_T // Since we cannot detect this, disable x64 by default 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Someone should change this manually if needed. 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #endif 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #endif 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #if defined (__MINGW32__) || defined(__MINGW64__) 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #include <stdint.h> // equivalent to msvc2010 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #elif defined (__GNUC__) 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #undef MPREAL_HAVE_INT64_SUPPORT // remove all shaman dances for x64 builds since 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #undef MPFR_USE_INTMAX_T // GCC already support x64 as of "long int" is 64-bit integer, nothing left to do 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #else 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #include <stdint.h> // use int64_t, uint64_t otherwise. 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #endif 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #endif 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined(MPREAL_HAVE_MSVC_DEBUGVIEW) && defined(_MSC_VER) && defined(_DEBUG) 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define MPREAL_MSVC_DEBUGVIEW_CODE DebugView = toString() 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #define MPREAL_MSVC_DEBUGVIEW_DATA std::string DebugView 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #define MPREAL_MSVC_DEBUGVIEW_CODE 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #define MPREAL_MSVC_DEBUGVIEW_DATA 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <mpfr.h> 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION < MPFR_VERSION_NUM(3,0,0)) 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #include <cstdlib> // needed for random() 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace mpfr { 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass mpreal { 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathprivate: 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_t mp; 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpublic: 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_rnd_t default_rnd; 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_prec_t default_prec; 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static int default_base; 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static int double_bits; 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpublic: 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Constructors && type conversion 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(); 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const mpreal& u); 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const mpfr_t u); 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const mpf_t u); 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const mpz_t u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const mpq_t u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const double u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const long double u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const unsigned long int u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const unsigned int u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const long int u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const int u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined (MPREAL_HAVE_INT64_SUPPORT) 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const uint64_t u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const int64_t u, mp_prec_t prec = default_prec, mp_rnd_t mode = default_rnd); 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const char* s, mp_prec_t prec = default_prec, int base = default_base, mp_rnd_t mode = default_rnd); 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal(const std::string& s, mp_prec_t prec = default_prec, int base = default_base, mp_rnd_t mode = default_rnd); 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ~mpreal(); 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Operations 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // = 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // +, -, *, /, ++, --, <<, >> 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // *=, +=, -=, /=, 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // <, >, ==, <=, >= 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // = 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const mpreal& v); 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const mpf_t v); 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const mpz_t v); 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const mpq_t v); 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const long double v); 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const double v); 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const unsigned long int v); 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const unsigned int v); 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const long int v); 181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const int v); 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator=(const char* s); 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // + 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const mpreal& v); 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const mpf_t v); 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const mpz_t v); 188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const mpq_t v); 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const long double u); 190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const double u); 191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const unsigned long int u); 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const unsigned int u); 193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const long int u); 194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const int u); 195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined (MPREAL_HAVE_INT64_SUPPORT) 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const int64_t u); 198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator+=(const uint64_t u); 199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const int64_t u); 200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const uint64_t u); 201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const int64_t u); 202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const uint64_t u); 203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const int64_t u); 204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const uint64_t u); 205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const mpreal operator+() const; 208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator++ (); 209c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const mpreal operator++ (int); 210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 211c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // - 212c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const mpreal& v); 213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const mpz_t v); 214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const mpq_t v); 215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const long double u); 216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const double u); 217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const unsigned long int u); 218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const unsigned int u); 219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const long int u); 220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-=(const int u); 221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const mpreal operator-() const; 222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator-(const unsigned long int b, const mpreal& a); 223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator-(const unsigned int b, const mpreal& a); 224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator-(const long int b, const mpreal& a); 225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator-(const int b, const mpreal& a); 226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator-(const double b, const mpreal& a); 227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator-- (); 228c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const mpreal operator-- (int); 229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // * 231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const mpreal& v); 232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const mpz_t v); 233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const mpq_t v); 234c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const long double v); 235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const double v); 236c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const unsigned long int v); 237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const unsigned int v); 238c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const long int v); 239c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator*=(const int v); 240c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // / 242c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const mpreal& v); 243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const mpz_t v); 244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const mpq_t v); 245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const long double v); 246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const double v); 247c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const unsigned long int v); 248c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const unsigned int v); 249c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const long int v); 250c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator/=(const int v); 251c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator/(const unsigned long int b, const mpreal& a); 252c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator/(const unsigned int b, const mpreal& a); 253c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator/(const long int b, const mpreal& a); 254c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator/(const int b, const mpreal& a); 255c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal operator/(const double b, const mpreal& a); 256c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 257c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath //<<= Fast Multiplication by 2^u 258c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator<<=(const unsigned long int u); 259c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator<<=(const unsigned int u); 260c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator<<=(const long int u); 261c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator<<=(const int u); 262c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 263c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath //>>= Fast Division by 2^u 264c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator>>=(const unsigned long int u); 265c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator>>=(const unsigned int u); 266c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator>>=(const long int u); 267c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& operator>>=(const int u); 268c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 269c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Boolean Operators 270c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator > (const mpreal& a, const mpreal& b); 271c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator >= (const mpreal& a, const mpreal& b); 272c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator < (const mpreal& a, const mpreal& b); 273c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator <= (const mpreal& a, const mpreal& b); 274c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator == (const mpreal& a, const mpreal& b); 275c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator != (const mpreal& a, const mpreal& b); 276c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 277c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Optimized specializations for boolean operators 278c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator == (const mpreal& a, const unsigned long int b); 279c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator == (const mpreal& a, const unsigned int b); 280c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator == (const mpreal& a, const long int b); 281c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator == (const mpreal& a, const int b); 282c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator == (const mpreal& a, const long double b); 283c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool operator == (const mpreal& a, const double b); 284c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 285c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Type Conversion operators 286c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath long toLong() const; 287c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath unsigned long toULong() const; 288c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double toDouble() const; 289c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath long double toLDouble() const; 290c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 291c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined (MPREAL_HAVE_INT64_SUPPORT) 292c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int64_t toInt64() const; 293c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath uint64_t toUInt64() const; 294c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 295c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 296c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Get raw pointers 297c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ::mpfr_ptr mpfr_ptr(); 298c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ::mpfr_srcptr mpfr_srcptr() const; 299c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 300c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Convert mpreal to string with n significant digits in base b 301c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // n = 0 -> convert with the maximum available digits 302c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::string toString(int n = 0, int b = default_base, mp_rnd_t mode = default_rnd) const; 303c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 304c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) 305c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::string toString(const std::string& format) const; 306c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 307c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 308c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Math Functions 309c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal sqr (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 310c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal sqrt(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 311c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal sqrt(const unsigned long int v, mp_rnd_t rnd_mode = mpreal::default_rnd); 312c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal cbrt(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 313c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal root(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::default_rnd); 314c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal pow (const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::default_rnd); 315c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal pow (const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode = mpreal::default_rnd); 316c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal pow (const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 317c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal pow (const mpreal& a, const long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 318c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal pow (const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::default_rnd); 319c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal pow (const unsigned long int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 320c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal fabs(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 321c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 322c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal abs(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 323c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::default_rnd); 324c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::default_rnd); 325c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::default_rnd); 326c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend inline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::default_rnd); 327c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::default_rnd); 328c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend int cmpabs(const mpreal& a,const mpreal& b); 329c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 330c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal log (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 331c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal log2 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 332c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal log10(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 333c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal exp (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 334c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal exp2 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 335c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal exp10(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 336c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal log1p(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 337c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal expm1(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 338c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 339c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal cos(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 340c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal sin(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 341c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal tan(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 342c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal sec(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 343c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal csc(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 344c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal cot(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 345c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 346c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 347c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal acos (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 348c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal asin (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 349c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal atan (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 350c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode = mpreal::default_rnd); 351c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal acot (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 352c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal asec (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 353c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal acsc (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 354c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 355c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal cosh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 356c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal sinh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 357c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal tanh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 358c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal sech (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 359c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal csch (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 360c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal coth (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 361c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal acosh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 362c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal asinh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 363c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal atanh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 364c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal acoth (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 365c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal asech (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 366c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal acsch (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 367c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 368c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::default_rnd); 369c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 370c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal fac_ui (unsigned long int v, mp_prec_t prec = mpreal::default_prec, mp_rnd_t rnd_mode = mpreal::default_rnd); 371c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal eint (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 372c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 373c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal gamma (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 374c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal lngamma (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 375c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal lgamma (const mpreal& v, int *signp = 0, mp_rnd_t rnd_mode = mpreal::default_rnd); 376c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal zeta (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 377c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal erf (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 378c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal erfc (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 379c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal besselj0 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 380c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal besselj1 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 381c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal besseljn (long n, const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 382c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal bessely0 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 383c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal bessely1 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 384c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal besselyn (long n, const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 385c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::default_rnd); 386c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::default_rnd); 387c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode = mpreal::default_rnd); 388c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal sum (const mpreal tab[], unsigned long int n, mp_rnd_t rnd_mode = mpreal::default_rnd); 389c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend int sgn(const mpreal& v); // -1 or +1 390c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 391c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MPFR 2.4.0 Specifics 392c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) 393c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend int sinh_cosh(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 394c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal li2(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 395c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::default_rnd); 396c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal rec_sqrt(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 397c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 398c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 399c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MPFR 3.0.0 Specifics 400c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) 401c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal digamma(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 402c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal ai(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 403c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal urandom (gmp_randstate_t& state,mp_rnd_t rnd_mode = mpreal::default_rnd); // use gmp_randinit_default() to init state, gmp_randclear() to clear 404c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool isregular(const mpreal& v); 405c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 406c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 407c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Uniformly distributed random number generation in [0,1] using 408c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Mersenne-Twister algorithm by default. 409c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Use parameter to setup seed, e.g.: random((unsigned)time(NULL)) 410c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Check urandom() for more precise control. 411c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal random(unsigned int seed = 0); 412c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 413c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Exponent and mantissa manipulation 414c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal frexp(const mpreal& v, mp_exp_t* exp); 415c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal ldexp(const mpreal& v, mp_exp_t exp); 416c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 417c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Splits mpreal value into fractional and integer parts. 418c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Returns fractional part and stores integer part in n. 419c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal modf(const mpreal& v, mpreal& n); 420c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 421c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Constants 422c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // don't forget to call mpfr_free_cache() for every thread where you are using const-functions 423c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal const_log2 (mp_prec_t prec = mpreal::default_prec, mp_rnd_t rnd_mode = mpreal::default_rnd); 424c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal const_pi (mp_prec_t prec = mpreal::default_prec, mp_rnd_t rnd_mode = mpreal::default_rnd); 425c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal const_euler (mp_prec_t prec = mpreal::default_prec, mp_rnd_t rnd_mode = mpreal::default_rnd); 426c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal const_catalan (mp_prec_t prec = mpreal::default_prec, mp_rnd_t rnd_mode = mpreal::default_rnd); 427c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // returns +inf iff sign>=0 otherwise -inf 428c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal const_infinity(int sign = 1, mp_prec_t prec = mpreal::default_prec, mp_rnd_t rnd_mode = mpreal::default_rnd); 429c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 430c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Output/ Input 431c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend std::ostream& operator<<(std::ostream& os, const mpreal& v); 432c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend std::istream& operator>>(std::istream& is, mpreal& v); 433c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 434c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Integer Related Functions 435c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal rint (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 436c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal ceil (const mpreal& v); 437c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal floor(const mpreal& v); 438c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal round(const mpreal& v); 439c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal trunc(const mpreal& v); 440c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal rint_ceil (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 441c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal rint_floor(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 442c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal rint_round(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 443c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal rint_trunc(const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 444c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal frac (const mpreal& v, mp_rnd_t rnd_mode = mpreal::default_rnd); 445c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal remainder (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::default_rnd); 446c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal remquo (long* q, const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::default_rnd); 447c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 448c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Miscellaneous Functions 449c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal nexttoward (const mpreal& x, const mpreal& y); 450c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal nextabove (const mpreal& x); 451c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal nextbelow (const mpreal& x); 452c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 453c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // use gmp_randinit_default() to init state, gmp_randclear() to clear 454c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal urandomb (gmp_randstate_t& state); 455c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 456c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MPFR < 2.4.2 Specifics 457c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION <= MPFR_VERSION_NUM(2,4,2)) 458c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal random2 (mp_size_t size, mp_exp_t exp); 459c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 460c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 461c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Instance Checkers 462c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool isnan (const mpreal& v); 463c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool isinf (const mpreal& v); 464c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool isfinite(const mpreal& v); 465c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 466c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool isnum(const mpreal& v); 467c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool iszero(const mpreal& v); 468c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend bool isint(const mpreal& v); 469c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 470c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Set/Get instance properties 471c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline mp_prec_t get_prec() const; 472c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void set_prec(mp_prec_t prec, mp_rnd_t rnd_mode = default_rnd); // Change precision with rounding mode 473c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 474c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Aliases for get_prec(), set_prec() - needed for compatibility with std::complex<mpreal> interface 475c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline mpreal& setPrecision(int Precision, mp_rnd_t RoundingMode = (mpfr_get_default_rounding_mode)()); 476c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline int getPrecision() const; 477c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 478c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Set mpreal to +/- inf, NaN, +/-0 479c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& setInf (int Sign = +1); 480c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& setNan (); 481c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& setZero (int Sign = +1); 482c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal& setSign (int Sign, mp_rnd_t RoundingMode = (mpfr_get_default_rounding_mode)()); 483c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 484c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath //Exponent 485c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mp_exp_t get_exp(); 486c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int set_exp(mp_exp_t e); 487c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int check_range (int t, mp_rnd_t rnd_mode = default_rnd); 488c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int subnormalize (int t,mp_rnd_t rnd_mode = default_rnd); 489c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 490c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Inexact conversion from float 491c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline bool fits_in_bits(double x, int n); 492c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 493c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Set/Get global properties 494c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void set_default_prec(mp_prec_t prec); 495c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_prec_t get_default_prec(); 496c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void set_default_base(int base); 497c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static int get_default_base(); 498c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void set_double_bits(int dbits); 499c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static int get_double_bits(); 500c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void set_default_rnd(mp_rnd_t rnd_mode); 501c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_rnd_t get_default_rnd(); 502c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_exp_t get_emin (void); 503c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_exp_t get_emax (void); 504c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_exp_t get_emin_min (void); 505c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_exp_t get_emin_max (void); 506c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_exp_t get_emax_min (void); 507c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static mp_exp_t get_emax_max (void); 508c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static int set_emin (mp_exp_t exp); 509c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static int set_emax (mp_exp_t exp); 510c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 511c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Efficient swapping of two mpreal values 512c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend void swap(mpreal& x, mpreal& y); 513c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 514c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath //Min Max - macros is evil. Needed for systems which defines max and min globally as macros (e.g. Windows) 515c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath //Hope that globally defined macros use > < operations only 516c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal fmax(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = default_rnd); 517c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const mpreal fmin(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = default_rnd); 518c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 519c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined (MPREAL_HAVE_CUSTOM_MPFR_MALLOC) 520c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 521c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathprivate: 522c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Optimized dynamic memory allocation/(re-)deallocation. 523c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static bool is_custom_malloc; 524c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void *mpreal_allocate (size_t alloc_size); 525c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void *mpreal_reallocate (void *ptr, size_t old_size, size_t new_size); 526c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void mpreal_free (void *ptr, size_t size); 527c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline static void set_custom_malloc (void); 528c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 529c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 530c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 531c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 532c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathprivate: 533c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Human friendly Debug Preview in Visual Studio. 534c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Put one of these lines: 535c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // 536c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // mpfr::mpreal=<DebugView> ; Show value only 537c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // mpfr::mpreal=<DebugView>, <mp[0]._mpfr_prec,u>bits ; Show value & precision 538c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // 539c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // at the beginning of 540c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // [Visual Studio Installation Folder]\Common7\Packages\Debugger\autoexp.dat 541c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_DATA 542c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 543c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 544c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 545c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Exceptions 546c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass conversion_overflow : public std::exception { 547c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpublic: 548c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::string why() { return "inexact conversion from floating point"; } 549c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 550c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 551c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal{ 552c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 553c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Use SFINAE to restrict arithmetic operations instantiation only for numeric types 554c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // This is needed for smooth integration with libraries based on expression templates 555c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <typename ArgumentType> struct result_type {}; 556c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 557c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<mpreal> {typedef mpreal type;}; 558c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<mpz_t> {typedef mpreal type;}; 559c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<mpq_t> {typedef mpreal type;}; 560c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<long double> {typedef mpreal type;}; 561c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<double> {typedef mpreal type;}; 562c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<unsigned long int> {typedef mpreal type;}; 563c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<unsigned int> {typedef mpreal type;}; 564c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<long int> {typedef mpreal type;}; 565c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<int> {typedef mpreal type;}; 566c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 567c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined (MPREAL_HAVE_INT64_SUPPORT) 568c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<int64_t > {typedef mpreal type;}; 569c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> struct result_type<uint64_t > {typedef mpreal type;}; 570c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 571c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 572c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 573c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// + Addition 574c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Rhs> 575c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const typename internal::result_type<Rhs>::type 576c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator+(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) += rhs; } 577c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 578c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Lhs> 579c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const typename internal::result_type<Lhs>::type 580c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator+(const Lhs& lhs, const mpreal& rhs){ return mpreal(rhs) += lhs; } 581c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 582c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// - Subtraction 583c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Rhs> 584c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const typename internal::result_type<Rhs>::type 585c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator-(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) -= rhs; } 586c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 587c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Lhs> 588c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const typename internal::result_type<Lhs>::type 589c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator-(const Lhs& lhs, const mpreal& rhs){ return mpreal(lhs) -= rhs; } 590c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 591c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// * Multiplication 592c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Rhs> 593c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const typename internal::result_type<Rhs>::type 594c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator*(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) *= rhs; } 595c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 596c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Lhs> 597c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const typename internal::result_type<Lhs>::type 598c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator*(const Lhs& lhs, const mpreal& rhs){ return mpreal(rhs) *= lhs; } 599c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 600c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// / Division 601c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Rhs> 602c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const typename internal::result_type<Rhs>::type 603c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator/(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) /= rhs; } 604c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 605c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Lhs> 606c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const typename internal::result_type<Lhs>::type 607c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator/(const Lhs& lhs, const mpreal& rhs){ return mpreal(lhs) /= rhs; } 608c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 609c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 610c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// sqrt 611c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal sqrt(const unsigned int v, mp_rnd_t rnd_mode = mpreal::default_rnd); 612c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal sqrt(const long int v, mp_rnd_t rnd_mode = mpreal::default_rnd); 613c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal sqrt(const int v, mp_rnd_t rnd_mode = mpreal::default_rnd); 614c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal sqrt(const long double v, mp_rnd_t rnd_mode = mpreal::default_rnd); 615c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal sqrt(const double v, mp_rnd_t rnd_mode = mpreal::default_rnd); 616c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 617c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 618c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// pow 619c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const mpreal& a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 620c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const mpreal& a, const int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 621c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const mpreal& a, const long double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 622c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const mpreal& a, const double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 623c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 624c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::default_rnd); 625c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::default_rnd); 626c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::default_rnd); 627c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long double a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::default_rnd); 628c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const double a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::default_rnd); 629c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 630c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned long int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 631c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned long int a, const long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 632c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned long int a, const int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 633c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned long int a, const long double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 634c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned long int a, const double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 635c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 636c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 637c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 638c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned int a, const long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 639c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned int a, const int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 640c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned int a, const long double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 641c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const unsigned int a, const double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 642c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 643c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 644c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 645c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long int a, const long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 646c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long int a, const int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 647c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long int a, const long double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 648c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long int a, const double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 649c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 650c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 651c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 652c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const int a, const long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 653c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const int a, const int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 654c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const int a, const long double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 655c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const int a, const double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 656c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 657c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long double a, const long double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 658c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long double a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 659c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long double a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 660c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long double a, const long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 661c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const long double a, const int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 662c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 663c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const double a, const double b, mp_rnd_t rnd_mode = mpreal::default_rnd); 664c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const double a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 665c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const double a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 666c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const double a, const long int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 667c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal pow(const double a, const int b, mp_rnd_t rnd_mode = mpreal::default_rnd); 668c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 669c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 670c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Estimate machine epsilon for the given precision 671c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Returns smallest eps such that 1.0 + eps != 1.0 672c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal machine_epsilon(mp_prec_t prec = mpreal::get_default_prec()); 673c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 674c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Returns the positive distance from abs(x) to the next larger in magnitude floating point number of the same precision as x 675c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal machine_epsilon(const mpreal& x); 676c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 677c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mpreal_min(mp_prec_t prec = mpreal::get_default_prec()); 678c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mpreal_max(mp_prec_t prec = mpreal::get_default_prec()); 679c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isEqualFuzzy(const mpreal& a, const mpreal& b, const mpreal& eps); 680c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isEqualUlps(const mpreal& a, const mpreal& b, int maxUlps); 681c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 682c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 683c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Bits - decimal digits relation 684c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// bits = ceil(digits*log[2](10)) 685c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// digits = floor(bits*log[10](2)) 686c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 687c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_prec_t digits2bits(int d); 688c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int bits2digits(mp_prec_t b); 689c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 690c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 691c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// min, max 692c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal (max)(const mpreal& x, const mpreal& y); 693c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst mpreal (min)(const mpreal& x, const mpreal& y); 694c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 695c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 696c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Implementation 697c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 698c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 699c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 700c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Operators - Assignment 701c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const mpreal& v) 702c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 703c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (this != &v) 704c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 705c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_clear(mp); 706c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_init2(mp,mpfr_get_prec(v.mp)); 707c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set(mp,v.mp,default_rnd); 708c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 709c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 710c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 711c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 712c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 713c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 714c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const mpf_t v) 715c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 716c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_f(mp,v,default_rnd); 717c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 718c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 719c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 720c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 721c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 722c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const mpz_t v) 723c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 724c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_z(mp,v,default_rnd); 725c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 726c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 727c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 728c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 729c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 730c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const mpq_t v) 731c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 732c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_q(mp,v,default_rnd); 733c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 734c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 735c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 736c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 737c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 738c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const long double v) 739c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 740c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_ld(mp,v,default_rnd); 741c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 742c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 743c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 744c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 745c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 746c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const double v) 747c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 748c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(double_bits == -1 || fits_in_bits(v, double_bits)) 749c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 750c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_d(mp,v,default_rnd); 751c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 752c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 753c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 754c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else 755c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath throw conversion_overflow(); 756c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 757c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 758c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 759c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 760c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const unsigned long int v) 761c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 762c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_ui(mp,v,default_rnd); 763c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 764c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 765c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 766c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 767c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 768c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const unsigned int v) 769c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 770c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_ui(mp,v,default_rnd); 771c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 772c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 773c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 774c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 775c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 776c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const long int v) 777c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 778c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_si(mp,v,default_rnd); 779c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 780c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 781c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 782c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 783c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 784c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator=(const int v) 785c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 786c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_si(mp,v,default_rnd); 787c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 788c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 789c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 790c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 791c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 792c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 793c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// + Addition 794c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const mpreal& v) 795c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 796c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_add(mp,mp,v.mp,default_rnd); 797c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 798c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 799c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 800c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 801c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const mpf_t u) 802c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 803c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this += mpreal(u); 804c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 805c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 806c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 807c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 808c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const mpz_t u) 809c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 810c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_add_z(mp,mp,u,default_rnd); 811c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 812c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 813c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 814c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 815c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const mpq_t u) 816c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 817c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_add_q(mp,mp,u,default_rnd); 818c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 819c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 820c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 821c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 822c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+= (const long double u) 823c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 824c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this += mpreal(u); 825c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 826c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 827c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 828c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 829c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+= (const double u) 830c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 831c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) 832c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_add_d(mp,mp,u,default_rnd); 833c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 834c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this += mpreal(u); 835c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 836c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 837c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 838c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 839c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 840c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 841c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const unsigned long int u) 842c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 843c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_add_ui(mp,mp,u,default_rnd); 844c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 845c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 846c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 847c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 848c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const unsigned int u) 849c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 850c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_add_ui(mp,mp,u,default_rnd); 851c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 852c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 853c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 854c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 855c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const long int u) 856c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 857c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_add_si(mp,mp,u,default_rnd); 858c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 859c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 860c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 861c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 862c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const int u) 863c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 864c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_add_si(mp,mp,u,default_rnd); 865c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 866c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 867c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 868c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 869c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined (MPREAL_HAVE_INT64_SUPPORT) 870c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const int64_t u){ *this += mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } 871c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator+=(const uint64_t u){ *this += mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } 872c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const int64_t u){ *this -= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } 873c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const uint64_t u){ *this -= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } 874c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const int64_t u){ *this *= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } 875c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const uint64_t u){ *this *= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } 876c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const int64_t u){ *this /= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } 877c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const uint64_t u){ *this /= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } 878c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 879c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 880c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mpreal::operator+()const { return mpreal(*this); } 881c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 882c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator+(const mpreal& a, const mpreal& b) 883c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 884c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // prec(a+b) = max(prec(a),prec(b)) 885c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(a.get_prec()>b.get_prec()) return mpreal(a) += b; 886c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return mpreal(b) += a; 887c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 888c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 889c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator++() 890c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 891c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this += 1; 892c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 893c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 894c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mpreal::operator++ (int) 895c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 896c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(*this); 897c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this += 1; 898c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 899c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 900c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 901c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator--() 902c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 903c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this -= 1; 904c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 905c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 906c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mpreal::operator-- (int) 907c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 908c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(*this); 909c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this -= 1; 910c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 911c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 912c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 913c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 914c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// - Subtraction 915c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-= (const mpreal& v) 916c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 917c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sub(mp,mp,v.mp,default_rnd); 918c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 919c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 920c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 921c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 922c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const mpz_t v) 923c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 924c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sub_z(mp,mp,v,default_rnd); 925c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 926c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 927c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 928c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 929c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const mpq_t v) 930c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 931c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sub_q(mp,mp,v,default_rnd); 932c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 933c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 934c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 935c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 936c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const long double v) 937c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 938c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this -= mpreal(v); 939c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 940c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 941c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 942c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 943c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const double v) 944c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 945c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) 946c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sub_d(mp,mp,v,default_rnd); 947c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 948c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this -= mpreal(v); 949c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 950c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 951c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 952c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 953c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 954c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 955c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const unsigned long int v) 956c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 957c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sub_ui(mp,mp,v,default_rnd); 958c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 959c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 960c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 961c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 962c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const unsigned int v) 963c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 964c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sub_ui(mp,mp,v,default_rnd); 965c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 966c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 967c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 968c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 969c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const long int v) 970c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 971c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sub_si(mp,mp,v,default_rnd); 972c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 973c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 974c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 975c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 976c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator-=(const int v) 977c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 978c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sub_si(mp,mp,v,default_rnd); 979c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 980c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 981c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 982c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 983c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mpreal::operator-()const 984c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 985c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal u(*this); 986c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_neg(u.mp,u.mp,default_rnd); 987c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return u; 988c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 989c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 990c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator-(const mpreal& a, const mpreal& b) 991c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 992c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // prec(a-b) = max(prec(a),prec(b)) 993c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(a.getPrecision() >= b.getPrecision()) 994c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 995c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpreal(a) -= b; 996c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath }else{ 997c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 998c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath x.setPrecision(b.getPrecision()); 999c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x -= b; 1000c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 1001c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1002c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1003c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator-(const double b, const mpreal& a) 1004c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1005c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) 1006c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1007c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_d_sub(x.mp,b,a.mp,mpreal::default_rnd); 1008c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1009c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 1010c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpreal(b) -= a; 1011c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 1012c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1013c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1014c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator-(const unsigned long int b, const mpreal& a) 1015c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1016c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1017c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_ui_sub(x.mp,b,a.mp,mpreal::default_rnd); 1018c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1019c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1020c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1021c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator-(const unsigned int b, const mpreal& a) 1022c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1023c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1024c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_ui_sub(x.mp,b,a.mp,mpreal::default_rnd); 1025c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1026c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1027c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1028c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator-(const long int b, const mpreal& a) 1029c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1030c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1031c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_si_sub(x.mp,b,a.mp,mpreal::default_rnd); 1032c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1033c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1034c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1035c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator-(const int b, const mpreal& a) 1036c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1037c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1038c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_si_sub(x.mp,b,a.mp,mpreal::default_rnd); 1039c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1040c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1041c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1042c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 1043c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// * Multiplication 1044c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*= (const mpreal& v) 1045c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1046c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul(mp,mp,v.mp,default_rnd); 1047c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1048c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1049c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1050c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1051c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const mpz_t v) 1052c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1053c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_z(mp,mp,v,default_rnd); 1054c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1055c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1056c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1057c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1058c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const mpq_t v) 1059c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1060c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_q(mp,mp,v,default_rnd); 1061c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1062c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1063c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1064c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1065c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const long double v) 1066c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1067c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this *= mpreal(v); 1068c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1069c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1070c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1071c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1072c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const double v) 1073c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1074c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) 1075c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_d(mp,mp,v,default_rnd); 1076c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 1077c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this *= mpreal(v); 1078c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 1079c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1080c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1081c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1082c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1083c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1084c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const unsigned long int v) 1085c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1086c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_ui(mp,mp,v,default_rnd); 1087c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1088c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1089c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1090c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1091c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const unsigned int v) 1092c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1093c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_ui(mp,mp,v,default_rnd); 1094c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1095c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1096c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1097c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1098c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const long int v) 1099c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_si(mp,mp,v,default_rnd); 1101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator*=(const int v) 1106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_si(mp,mp,v,default_rnd); 1108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator*(const mpreal& a, const mpreal& b) 1113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // prec(a*b) = max(prec(a),prec(b)) 1115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(a.getPrecision() >= b.getPrecision()) return mpreal(a) *= b; 1116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return mpreal(b) *= a; 1117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 1120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// / Division 1121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const mpreal& v) 1122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div(mp,mp,v.mp,default_rnd); 1124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const mpz_t v) 1129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_z(mp,mp,v,default_rnd); 1131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const mpq_t v) 1136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_q(mp,mp,v,default_rnd); 1138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const long double v) 1143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this /= mpreal(v); 1145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const double v) 1150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) 1152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_d(mp,mp,v,default_rnd); 1153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 1154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this /= mpreal(v); 1155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 1156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const unsigned long int v) 1161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_ui(mp,mp,v,default_rnd); 1163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const unsigned int v) 1168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_ui(mp,mp,v,default_rnd); 1170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const long int v) 1175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_si(mp,mp,v,default_rnd); 1177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator/=(const int v) 1182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_si(mp,mp,v,default_rnd); 1184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator/(const mpreal& a, const mpreal& b) 1189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // prec(a/b) = max(prec(a),prec(b)) 1191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(a.getPrecision() >= b.getPrecision()) 1192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 1193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpreal(a) /= b; 1194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath }else{ 1195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath x.setPrecision(b.getPrecision()); 1198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x /= b; 1199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 1200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator/(const unsigned long int b, const mpreal& a) 1203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_ui_div(x.mp,b,a.mp,mpreal::default_rnd); 1206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1209c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator/(const unsigned int b, const mpreal& a) 1210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1211c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1212c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_ui_div(x.mp,b,a.mp,mpreal::default_rnd); 1213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator/(const long int b, const mpreal& a) 1217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_si_div(x.mp,b,a.mp,mpreal::default_rnd); 1220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator/(const int b, const mpreal& a) 1224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_si_div(x.mp,b,a.mp,mpreal::default_rnd); 1227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1228c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator/(const double b, const mpreal& a) 1231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) 1233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1234c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_d_div(x.mp,b,a.mp,mpreal::default_rnd); 1235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1236c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 1237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpreal(b) /= a; 1238c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 1239c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1240c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 1242c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Shifts operators - Multiplication/Division by power of 2 1243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator<<=(const unsigned long int u) 1244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_2ui(mp,mp,u,default_rnd); 1246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1247c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1248c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1249c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1250c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator<<=(const unsigned int u) 1251c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1252c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_2ui(mp,mp,static_cast<unsigned long int>(u),default_rnd); 1253c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1254c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1255c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1256c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1257c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator<<=(const long int u) 1258c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1259c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_2si(mp,mp,u,default_rnd); 1260c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1261c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1262c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1263c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1264c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator<<=(const int u) 1265c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1266c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_2si(mp,mp,static_cast<long int>(u),default_rnd); 1267c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1268c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1269c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1270c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1271c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator>>=(const unsigned long int u) 1272c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1273c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_2ui(mp,mp,u,default_rnd); 1274c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1275c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1276c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1277c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1278c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator>>=(const unsigned int u) 1279c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1280c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_2ui(mp,mp,static_cast<unsigned long int>(u),default_rnd); 1281c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1282c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1283c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1284c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1285c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator>>=(const long int u) 1286c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1287c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_2si(mp,mp,u,default_rnd); 1288c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1289c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1290c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1291c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1292c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::operator>>=(const int u) 1293c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1294c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_2si(mp,mp,static_cast<long int>(u),default_rnd); 1295c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1296c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1297c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1298c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1299c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator<<(const mpreal& v, const unsigned long int k) 1300c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1301c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mul_2ui(v,k); 1302c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1303c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1304c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator<<(const mpreal& v, const unsigned int k) 1305c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1306c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mul_2ui(v,static_cast<unsigned long int>(k)); 1307c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1308c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1309c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator<<(const mpreal& v, const long int k) 1310c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1311c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mul_2si(v,k); 1312c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1313c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1314c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator<<(const mpreal& v, const int k) 1315c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1316c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mul_2si(v,static_cast<long int>(k)); 1317c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1318c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1319c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator>>(const mpreal& v, const unsigned long int k) 1320c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1321c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return div_2ui(v,k); 1322c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1323c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1324c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator>>(const mpreal& v, const long int k) 1325c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1326c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return div_2si(v,k); 1327c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1328c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1329c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator>>(const mpreal& v, const unsigned int k) 1330c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1331c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return div_2ui(v,static_cast<unsigned long int>(k)); 1332c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1333c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1334c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal operator>>(const mpreal& v, const int k) 1335c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1336c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return div_2si(v,static_cast<long int>(k)); 1337c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1338c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1339c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// mul_2ui 1340c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode) 1341c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1342c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1343c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_2ui(x.mp,v.mp,k,rnd_mode); 1344c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1345c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1346c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1347c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// mul_2si 1348c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode) 1349c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1350c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1351c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_2si(x.mp,v.mp,k,rnd_mode); 1352c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1353c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1354c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1355c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode) 1356c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1357c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1358c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_2ui(x.mp,v.mp,k,rnd_mode); 1359c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1360c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1361c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1362c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode) 1363c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1364c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1365c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_div_2si(x.mp,v.mp,k,rnd_mode); 1366c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1367c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1368c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1369c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 1370c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//Boolean operators 1371c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator > (const mpreal& a, const mpreal& b){ return (mpfr_greater_p(a.mp,b.mp) !=0); } 1372c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator >= (const mpreal& a, const mpreal& b){ return (mpfr_greaterequal_p(a.mp,b.mp) !=0); } 1373c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator < (const mpreal& a, const mpreal& b){ return (mpfr_less_p(a.mp,b.mp) !=0); } 1374c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator <= (const mpreal& a, const mpreal& b){ return (mpfr_lessequal_p(a.mp,b.mp) !=0); } 1375c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator == (const mpreal& a, const mpreal& b){ return (mpfr_equal_p(a.mp,b.mp) !=0); } 1376c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator != (const mpreal& a, const mpreal& b){ return (mpfr_lessgreater_p(a.mp,b.mp) !=0); } 1377c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1378c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator == (const mpreal& a, const unsigned long int b ){ return (mpfr_cmp_ui(a.mp,b) == 0); } 1379c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator == (const mpreal& a, const unsigned int b ){ return (mpfr_cmp_ui(a.mp,b) == 0); } 1380c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator == (const mpreal& a, const long int b ){ return (mpfr_cmp_si(a.mp,b) == 0); } 1381c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator == (const mpreal& a, const int b ){ return (mpfr_cmp_si(a.mp,b) == 0); } 1382c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator == (const mpreal& a, const long double b ){ return (mpfr_cmp_ld(a.mp,b) == 0); } 1383c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool operator == (const mpreal& a, const double b ){ return (mpfr_cmp_d(a.mp,b) == 0); } 1384c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1385c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1386c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isnan (const mpreal& v){ return (mpfr_nan_p(v.mp) != 0); } 1387c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isinf (const mpreal& v){ return (mpfr_inf_p(v.mp) != 0); } 1388c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isfinite(const mpreal& v){ return (mpfr_number_p(v.mp) != 0); } 1389c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool iszero (const mpreal& v){ return (mpfr_zero_p(v.mp) != 0); } 1390c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isint (const mpreal& v){ return (mpfr_integer_p(v.mp) != 0); } 1391c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1392c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) 1393c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isregular(const mpreal& v){ return (mpfr_regular_p(v.mp));} 1394c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 1395c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1396c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 1397c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Type Converters 1398c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline long mpreal::toLong() const { return mpfr_get_si(mp,GMP_RNDZ); } 1399c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline unsigned long mpreal::toULong() const { return mpfr_get_ui(mp,GMP_RNDZ); } 1400c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline double mpreal::toDouble() const { return mpfr_get_d(mp,default_rnd); } 1401c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline long double mpreal::toLDouble() const { return mpfr_get_ld(mp,default_rnd); } 1402c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1403c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined (MPREAL_HAVE_INT64_SUPPORT) 1404c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int64_t mpreal::toInt64() const{ return mpfr_get_sj(mp,GMP_RNDZ); } 1405c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline uint64_t mpreal::toUInt64() const{ return mpfr_get_uj(mp,GMP_RNDZ); } 1406c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 1407c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1408c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline ::mpfr_ptr mpreal::mpfr_ptr() { return mp; } 1409c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline ::mpfr_srcptr mpreal::mpfr_srcptr() const { return const_cast< ::mpfr_srcptr >(mp); } 1410c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1411c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 1412c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Bits - decimal digits relation 1413c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// bits = ceil(digits*log[2](10)) 1414c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// digits = floor(bits*log[10](2)) 1415c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1416c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_prec_t digits2bits(int d) 1417c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1418c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const double LOG2_10 = 3.3219280948873624; 1419c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1420c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath d = 10>d?10:d; 1421c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1422c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return (mp_prec_t)std::ceil((d)*LOG2_10); 1423c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1424c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1425c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int bits2digits(mp_prec_t b) 1426c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1427c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const double LOG10_2 = 0.30102999566398119; 1428c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1429c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath b = 34>b?34:b; 1430c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1431c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return (int)std::floor((b)*LOG10_2); 1432c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1433c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1434c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 1435c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Set/Get number properties 1436c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int sgn(const mpreal& v) 1437c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1438c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int r = mpfr_signbit(v.mp); 1439c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return (r>0?-1:1); 1440c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1441c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1442c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::setSign(int sign, mp_rnd_t RoundingMode) 1443c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1444c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_setsign(mp,mp,(sign<0?1:0),RoundingMode); 1445c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1446c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1447c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1448c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1449c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int mpreal::getPrecision() const 1450c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1451c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_get_prec(mp); 1452c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1453c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1454c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::setPrecision(int Precision, mp_rnd_t RoundingMode) 1455c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1456c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_prec_round(mp,Precision, RoundingMode); 1457c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1458c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1459c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1460c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1461c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::setInf(int sign) 1462c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1463c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_inf(mp,sign); 1464c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1465c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1466c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1467c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1468c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::setNan() 1469c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1470c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_nan(mp); 1471c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1472c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1473c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1474c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1475c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mpreal& mpreal::setZero(int sign) 1476c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1477c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_zero(mp,sign); 1478c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1479c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 1480c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1481c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1482c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_prec_t mpreal::get_prec() const 1483c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1484c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_get_prec(mp); 1485c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1486c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1487c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void mpreal::set_prec(mp_prec_t prec, mp_rnd_t rnd_mode) 1488c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1489c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_prec_round(mp,prec,rnd_mode); 1490c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1491c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1492c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1493c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_exp_t mpreal::get_exp () 1494c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1495c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_get_exp(mp); 1496c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1497c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1498c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int mpreal::set_exp (mp_exp_t e) 1499c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1500c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int x = mpfr_set_exp(mp, e); 1501c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1502c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1503c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1504c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1505c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal frexp(const mpreal& v, mp_exp_t* exp) 1506c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1507c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1508c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *exp = x.get_exp(); 1509c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath x.set_exp(0); 1510c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1511c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1512c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1513c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal ldexp(const mpreal& v, mp_exp_t exp) 1514c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1515c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1516c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1517c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // rounding is not important since we just increasing the exponent 1518c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_mul_2si(x.mp,x.mp,exp,mpreal::default_rnd); 1519c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1520c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1521c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1522c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal machine_epsilon(mp_prec_t prec) 1523c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1524c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // the smallest eps such that 1.0+eps != 1.0 1525c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // depends (of cause) on the precision 1526c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return machine_epsilon(mpreal(1,prec)); 1527c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1528c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1529c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal machine_epsilon(const mpreal& x) 1530c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1531c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if( x < 0) 1532c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 1533c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return nextabove(-x)+x; 1534c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath }else{ 1535c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return nextabove(x)-x; 1536c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 1537c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1538c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1539c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mpreal_min(mp_prec_t prec) 1540c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1541c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // min = 1/2*2^emin = 2^(emin-1) 1542c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1543c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpreal(1,prec) << mpreal::get_emin()-1; 1544c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1545c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1546c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal mpreal_max(mp_prec_t prec) 1547c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1548c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // max = (1-eps)*2^emax, assume eps = 0?, 1549c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // and use emax-1 to prevent value to be +inf 1550c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // max = 2^(emax-1) 1551c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1552c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpreal(1,prec) << mpreal::get_emax()-1; 1553c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1554c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1555c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isEqualUlps(const mpreal& a, const mpreal& b, int maxUlps) 1556c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1557c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /* 1558c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath maxUlps - a and b can be apart by maxUlps binary numbers. 1559c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 1560c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return abs(a - b) <= machine_epsilon((max)(abs(a), abs(b))) * maxUlps; 1561c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1562c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1563c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isEqualFuzzy(const mpreal& a, const mpreal& b, const mpreal& eps) 1564c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1565c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return abs(a - b) <= (min)(abs(a), abs(b)) * eps; 1566c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1567c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1568c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool isEqualFuzzy(const mpreal& a, const mpreal& b) 1569c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1570c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return isEqualFuzzy(a,b,machine_epsilon((std::min)(abs(a), abs(b)))); 1571c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1572c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1573c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal modf(const mpreal& v, mpreal& n) 1574c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1575c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal frac(v); 1576c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1577c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // rounding is not important since we are using the same number 1578c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_frac(frac.mp,frac.mp,mpreal::default_rnd); 1579c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_trunc(n.mp,v.mp); 1580c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return frac; 1581c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1582c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1583c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int mpreal::check_range (int t, mp_rnd_t rnd_mode) 1584c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1585c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_check_range(mp,t,rnd_mode); 1586c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1587c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1588c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int mpreal::subnormalize (int t,mp_rnd_t rnd_mode) 1589c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1590c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int r = mpfr_subnormalize(mp,t,rnd_mode); 1591c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MPREAL_MSVC_DEBUGVIEW_CODE; 1592c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return r; 1593c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1594c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1595c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_exp_t mpreal::get_emin (void) 1596c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1597c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_get_emin(); 1598c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1599c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1600c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int mpreal::set_emin (mp_exp_t exp) 1601c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1602c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_set_emin(exp); 1603c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1604c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1605c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_exp_t mpreal::get_emax (void) 1606c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1607c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_get_emax(); 1608c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1609c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1610c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int mpreal::set_emax (mp_exp_t exp) 1611c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1612c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_set_emax(exp); 1613c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1614c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1615c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_exp_t mpreal::get_emin_min (void) 1616c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1617c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_get_emin_min(); 1618c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1619c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1620c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_exp_t mpreal::get_emin_max (void) 1621c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1622c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_get_emin_max(); 1623c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1624c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1625c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_exp_t mpreal::get_emax_min (void) 1626c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1627c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_get_emax_min(); 1628c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1629c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1630c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_exp_t mpreal::get_emax_max (void) 1631c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1632c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_get_emax_max(); 1633c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1634c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1635c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 1636c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Mathematical Functions 1637c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 1638c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sqr(const mpreal& v, mp_rnd_t rnd_mode) 1639c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1640c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1641c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sqr(x.mp,x.mp,rnd_mode); 1642c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1643c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1644c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1645c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sqrt(const mpreal& v, mp_rnd_t rnd_mode) 1646c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1647c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1648c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sqrt(x.mp,x.mp,rnd_mode); 1649c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1650c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1651c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1652c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sqrt(const unsigned long int v, mp_rnd_t rnd_mode) 1653c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1654c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x; 1655c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sqrt_ui(x.mp,v,rnd_mode); 1656c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1657c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1658c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1659c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sqrt(const unsigned int v, mp_rnd_t rnd_mode) 1660c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1661c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return sqrt(static_cast<unsigned long int>(v),rnd_mode); 1662c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1663c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1664c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sqrt(const long int v, mp_rnd_t rnd_mode) 1665c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1666c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (v>=0) return sqrt(static_cast<unsigned long int>(v),rnd_mode); 1667c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return mpreal().setNan(); // NaN 1668c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1669c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1670c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sqrt(const int v, mp_rnd_t rnd_mode) 1671c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1672c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (v>=0) return sqrt(static_cast<unsigned long int>(v),rnd_mode); 1673c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return mpreal().setNan(); // NaN 1674c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1675c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1676c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sqrt(const long double v, mp_rnd_t rnd_mode) 1677c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1678c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return sqrt(mpreal(v),rnd_mode); 1679c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1680c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1681c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sqrt(const double v, mp_rnd_t rnd_mode) 1682c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1683c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return sqrt(mpreal(v),rnd_mode); 1684c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1685c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1686c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal cbrt(const mpreal& v, mp_rnd_t rnd_mode) 1687c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1688c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1689c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_cbrt(x.mp,x.mp,rnd_mode); 1690c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1691c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1692c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1693c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal root(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode) 1694c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1695c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1696c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_root(x.mp,x.mp,k,rnd_mode); 1697c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1698c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1699c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1700c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal fabs(const mpreal& v, mp_rnd_t rnd_mode) 1701c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1702c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1703c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_abs(x.mp,x.mp,rnd_mode); 1704c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1705c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1706c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1707c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal abs(const mpreal& v, mp_rnd_t rnd_mode) 1708c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1709c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1710c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_abs(x.mp,x.mp,rnd_mode); 1711c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1712c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1713c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1714c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode) 1715c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1716c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 1717c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_dim(x.mp,a.mp,b.mp,rnd_mode); 1718c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1719c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1720c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1721c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int cmpabs(const mpreal& a,const mpreal& b) 1722c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1723c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_cmpabs(a.mp,b.mp); 1724c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1725c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1726c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal log (const mpreal& v, mp_rnd_t rnd_mode) 1727c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1728c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1729c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_log(x.mp,v.mp,rnd_mode); 1730c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1731c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1732c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1733c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal log2(const mpreal& v, mp_rnd_t rnd_mode) 1734c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1735c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1736c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_log2(x.mp,v.mp,rnd_mode); 1737c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1738c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1739c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1740c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal log10(const mpreal& v, mp_rnd_t rnd_mode) 1741c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1742c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1743c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_log10(x.mp,v.mp,rnd_mode); 1744c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1745c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1746c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1747c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal exp(const mpreal& v, mp_rnd_t rnd_mode) 1748c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1749c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1750c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_exp(x.mp,v.mp,rnd_mode); 1751c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1752c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1753c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1754c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal exp2(const mpreal& v, mp_rnd_t rnd_mode) 1755c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1756c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1757c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_exp2(x.mp,v.mp,rnd_mode); 1758c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1759c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1760c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1761c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal exp10(const mpreal& v, mp_rnd_t rnd_mode) 1762c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1763c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1764c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_exp10(x.mp,v.mp,rnd_mode); 1765c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1766c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1767c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1768c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal cos(const mpreal& v, mp_rnd_t rnd_mode) 1769c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1770c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1771c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_cos(x.mp,v.mp,rnd_mode); 1772c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1773c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1774c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1775c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sin(const mpreal& v, mp_rnd_t rnd_mode) 1776c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1777c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1778c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sin(x.mp,v.mp,rnd_mode); 1779c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1780c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1781c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1782c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal tan(const mpreal& v, mp_rnd_t rnd_mode) 1783c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1784c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1785c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_tan(x.mp,v.mp,rnd_mode); 1786c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1787c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1788c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1789c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sec(const mpreal& v, mp_rnd_t rnd_mode) 1790c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1791c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1792c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sec(x.mp,v.mp,rnd_mode); 1793c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1794c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1795c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1796c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal csc(const mpreal& v, mp_rnd_t rnd_mode) 1797c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1798c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1799c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_csc(x.mp,v.mp,rnd_mode); 1800c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1801c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1802c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1803c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal cot(const mpreal& v, mp_rnd_t rnd_mode) 1804c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1805c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1806c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_cot(x.mp,v.mp,rnd_mode); 1807c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1808c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1809c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1810c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode) 1811c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1812c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_sin_cos(s.mp,c.mp,v.mp,rnd_mode); 1813c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1814c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1815c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal acos (const mpreal& v, mp_rnd_t rnd_mode) 1816c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1817c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1818c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_acos(x.mp,v.mp,rnd_mode); 1819c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1820c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1821c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1822c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal asin (const mpreal& v, mp_rnd_t rnd_mode) 1823c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1824c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1825c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_asin(x.mp,v.mp,rnd_mode); 1826c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1827c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1828c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1829c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal atan (const mpreal& v, mp_rnd_t rnd_mode) 1830c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1831c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1832c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_atan(x.mp,v.mp,rnd_mode); 1833c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1834c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1835c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1836c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal acot (const mpreal& v, mp_rnd_t rnd_mode) 1837c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1838c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return atan(1/v, rnd_mode); 1839c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1840c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1841c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal asec (const mpreal& v, mp_rnd_t rnd_mode) 1842c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1843c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return acos(1/v, rnd_mode); 1844c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1845c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1846c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal acsc (const mpreal& v, mp_rnd_t rnd_mode) 1847c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1848c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return asin(1/v, rnd_mode); 1849c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1850c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1851c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal acoth (const mpreal& v, mp_rnd_t rnd_mode) 1852c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1853c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return atanh(1/v, rnd_mode); 1854c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1855c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1856c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal asech (const mpreal& v, mp_rnd_t rnd_mode) 1857c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1858c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return acosh(1/v, rnd_mode); 1859c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1860c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1861c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal acsch (const mpreal& v, mp_rnd_t rnd_mode) 1862c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1863c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return asinh(1/v, rnd_mode); 1864c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1865c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1866c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode) 1867c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1868c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal a; 1869c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mp_prec_t yp, xp; 1870c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1871c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath yp = y.get_prec(); 1872c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath xp = x.get_prec(); 1873c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1874c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath a.set_prec(yp>xp?yp:xp); 1875c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1876c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_atan2(a.mp, y.mp, x.mp, rnd_mode); 1877c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1878c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return a; 1879c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1880c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1881c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal cosh (const mpreal& v, mp_rnd_t rnd_mode) 1882c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1883c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1884c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_cosh(x.mp,v.mp,rnd_mode); 1885c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1886c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1887c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1888c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sinh (const mpreal& v, mp_rnd_t rnd_mode) 1889c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1890c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1891c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sinh(x.mp,v.mp,rnd_mode); 1892c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1893c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1894c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1895c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal tanh (const mpreal& v, mp_rnd_t rnd_mode) 1896c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1897c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1898c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_tanh(x.mp,v.mp,rnd_mode); 1899c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1900c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1901c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1902c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal sech (const mpreal& v, mp_rnd_t rnd_mode) 1903c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1904c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1905c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_sech(x.mp,v.mp,rnd_mode); 1906c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1907c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1908c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1909c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal csch (const mpreal& v, mp_rnd_t rnd_mode) 1910c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1911c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1912c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_csch(x.mp,v.mp,rnd_mode); 1913c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1914c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1915c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1916c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal coth (const mpreal& v, mp_rnd_t rnd_mode) 1917c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1918c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1919c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_coth(x.mp,v.mp,rnd_mode); 1920c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1921c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1922c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1923c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal acosh (const mpreal& v, mp_rnd_t rnd_mode) 1924c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1925c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1926c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_acosh(x.mp,v.mp,rnd_mode); 1927c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1928c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1929c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1930c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal asinh (const mpreal& v, mp_rnd_t rnd_mode) 1931c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1932c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1933c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_asinh(x.mp,v.mp,rnd_mode); 1934c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1935c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1936c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1937c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal atanh (const mpreal& v, mp_rnd_t rnd_mode) 1938c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1939c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1940c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_atanh(x.mp,v.mp,rnd_mode); 1941c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1942c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1943c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1944c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) 1945c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1946c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal a; 1947c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mp_prec_t yp, xp; 1948c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1949c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath yp = y.get_prec(); 1950c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath xp = x.get_prec(); 1951c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1952c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath a.set_prec(yp>xp?yp:xp); 1953c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1954c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_hypot(a.mp, x.mp, y.mp, rnd_mode); 1955c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1956c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return a; 1957c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1958c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1959c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal remainder (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) 1960c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1961c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal a; 1962c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mp_prec_t yp, xp; 1963c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1964c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath yp = y.get_prec(); 1965c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath xp = x.get_prec(); 1966c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1967c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath a.set_prec(yp>xp?yp:xp); 1968c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1969c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_remainder(a.mp, x.mp, y.mp, rnd_mode); 1970c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1971c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return a; 1972c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1973c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1974c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal fac_ui (unsigned long int v, mp_prec_t prec, mp_rnd_t rnd_mode) 1975c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1976c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(0,prec); 1977c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_fac_ui(x.mp,v,rnd_mode); 1978c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1979c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1980c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1981c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal log1p (const mpreal& v, mp_rnd_t rnd_mode) 1982c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1983c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1984c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_log1p(x.mp,v.mp,rnd_mode); 1985c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1986c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1987c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1988c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal expm1 (const mpreal& v, mp_rnd_t rnd_mode) 1989c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1990c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1991c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_expm1(x.mp,v.mp,rnd_mode); 1992c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 1993c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 1994c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1995c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal eint (const mpreal& v, mp_rnd_t rnd_mode) 1996c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1997c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 1998c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_eint(x.mp,v.mp,rnd_mode); 1999c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2000c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2001c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2002c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal gamma (const mpreal& x, mp_rnd_t rnd_mode) 2003c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2004c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal FunctionValue(x); 2005c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2006c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // x < 0: gamma(-x) = -pi/(x * gamma(x) * sin(pi*x)) 2007c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2008c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_gamma(FunctionValue.mp, x.mp, rnd_mode); 2009c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2010c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return FunctionValue; 2011c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2012c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2013c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal lngamma (const mpreal& v, mp_rnd_t rnd_mode) 2014c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2015c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2016c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_lngamma(x.mp,v.mp,rnd_mode); 2017c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2018c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2019c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2020c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal lgamma (const mpreal& v, int *signp, mp_rnd_t rnd_mode) 2021c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2022c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2023c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int tsignp; 2024c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2025c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(signp) 2026c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_lgamma(x.mp,signp,v.mp,rnd_mode); 2027c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else 2028c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_lgamma(x.mp,&tsignp,v.mp,rnd_mode); 2029c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2030c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2031c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2032c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2033c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal zeta (const mpreal& v, mp_rnd_t rnd_mode) 2034c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2035c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2036c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_zeta(x.mp,v.mp,rnd_mode); 2037c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2038c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2039c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2040c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal erf (const mpreal& v, mp_rnd_t rnd_mode) 2041c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2042c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2043c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_erf(x.mp,v.mp,rnd_mode); 2044c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2045c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2046c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2047c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal erfc (const mpreal& v, mp_rnd_t rnd_mode) 2048c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2049c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2050c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_erfc(x.mp,v.mp,rnd_mode); 2051c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2052c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2053c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2054c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal besselj0 (const mpreal& v, mp_rnd_t rnd_mode) 2055c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2056c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2057c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_j0(x.mp,v.mp,rnd_mode); 2058c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2059c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2060c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2061c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal besselj1 (const mpreal& v, mp_rnd_t rnd_mode) 2062c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2063c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2064c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_j1(x.mp,v.mp,rnd_mode); 2065c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2066c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2067c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2068c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal besseljn (long n, const mpreal& v, mp_rnd_t rnd_mode) 2069c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2070c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2071c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_jn(x.mp,n,v.mp,rnd_mode); 2072c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2073c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2074c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2075c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal bessely0 (const mpreal& v, mp_rnd_t rnd_mode) 2076c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2077c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2078c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_y0(x.mp,v.mp,rnd_mode); 2079c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2080c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2081c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2082c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal bessely1 (const mpreal& v, mp_rnd_t rnd_mode) 2083c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2084c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2085c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_y1(x.mp,v.mp,rnd_mode); 2086c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2087c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2088c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2089c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal besselyn (long n, const mpreal& v, mp_rnd_t rnd_mode) 2090c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2091c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2092c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_yn(x.mp,n,v.mp,rnd_mode); 2093c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2094c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2095c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2096c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 2097c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MPFR 2.4.0 Specifics 2098c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) 2099c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int sinh_cosh(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode) 2101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr_sinh_cosh(s.mp,c.mp,v.mp,rnd_mode); 2103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal li2(const mpreal& v, mp_rnd_t rnd_mode) 2106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_li2(x.mp,v.mp,rnd_mode); 2109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) 2113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal a; 2115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mp_prec_t yp, xp; 2116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath yp = y.get_prec(); 2118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath xp = x.get_prec(); 2119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath a.set_prec(yp>xp?yp:xp); 2121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_fmod(a.mp, x.mp, y.mp, rnd_mode); 2123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return a; 2125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal rec_sqrt(const mpreal& v, mp_rnd_t rnd_mode) 2128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_rec_sqrt(x.mp,v.mp,rnd_mode); 2131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // MPFR 2.4.0 Specifics 2134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 2136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MPFR 3.0.0 Specifics 2137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) 2138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal digamma(const mpreal& v, mp_rnd_t rnd_mode) 2140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_digamma(x.mp,v.mp,rnd_mode); 2143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal ai(const mpreal& v, mp_rnd_t rnd_mode) 2147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_ai(x.mp,v.mp,rnd_mode); 2150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // MPFR 3.0.0 Specifics 2154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 2156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Constants 2157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal const_log2 (mp_prec_t prec, mp_rnd_t rnd_mode) 2158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x; 2160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath x.set_prec(prec); 2161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_const_log2(x.mp,rnd_mode); 2162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal const_pi (mp_prec_t prec, mp_rnd_t rnd_mode) 2166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x; 2168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath x.set_prec(prec); 2169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_const_pi(x.mp,rnd_mode); 2170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal const_euler (mp_prec_t prec, mp_rnd_t rnd_mode) 2174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x; 2176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath x.set_prec(prec); 2177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_const_euler(x.mp,rnd_mode); 2178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal const_catalan (mp_prec_t prec, mp_rnd_t rnd_mode) 2182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x; 2184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath x.set_prec(prec); 2185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_const_catalan(x.mp,rnd_mode); 2186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal const_infinity (int sign, mp_prec_t prec, mp_rnd_t rnd_mode) 2190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x; 2192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath x.set_prec(prec,rnd_mode); 2193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_inf(x.mp, sign); 2194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 2198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Integer Related Functions 2199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal rint(const mpreal& v, mp_rnd_t rnd_mode) 2200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_rint(x.mp,v.mp,rnd_mode); 2203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal ceil(const mpreal& v) 2207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2209c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_ceil(x.mp,v.mp); 2210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2211c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2212c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal floor(const mpreal& v) 2215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_floor(x.mp,v.mp); 2218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal round(const mpreal& v) 2222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_round(x.mp,v.mp); 2225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2228c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal trunc(const mpreal& v) 2229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_trunc(x.mp,v.mp); 2232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2234c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal rint_ceil (const mpreal& v, mp_rnd_t rnd_mode) 2236c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2238c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_rint_ceil(x.mp,v.mp,rnd_mode); 2239c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2240c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2242c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal rint_floor(const mpreal& v, mp_rnd_t rnd_mode) 2243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_rint_floor(x.mp,v.mp,rnd_mode); 2246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2247c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2248c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2249c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal rint_round(const mpreal& v, mp_rnd_t rnd_mode) 2250c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2251c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2252c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_rint_round(x.mp,v.mp,rnd_mode); 2253c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2254c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2255c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2256c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal rint_trunc(const mpreal& v, mp_rnd_t rnd_mode) 2257c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2258c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2259c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_rint_trunc(x.mp,v.mp,rnd_mode); 2260c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2261c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2262c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2263c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal frac (const mpreal& v, mp_rnd_t rnd_mode) 2264c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2265c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(v); 2266c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_frac(x.mp,v.mp,rnd_mode); 2267c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2268c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2269c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2270c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 2271c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Miscellaneous Functions 2272c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void swap(mpreal& a, mpreal& b) 2273c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2274c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_swap(a.mp,b.mp); 2275c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2276c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2277c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal (max)(const mpreal& x, const mpreal& y) 2278c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2279c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return (x>y?x:y); 2280c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2281c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2282c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal (min)(const mpreal& x, const mpreal& y) 2283c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2284c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return (x<y?x:y); 2285c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2286c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2287c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal fmax(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) 2288c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2289c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal a; 2290c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_max(a.mp,x.mp,y.mp,rnd_mode); 2291c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return a; 2292c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2293c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2294c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal fmin(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode) 2295c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2296c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal a; 2297c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_min(a.mp,x.mp,y.mp,rnd_mode); 2298c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return a; 2299c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2300c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2301c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal nexttoward (const mpreal& x, const mpreal& y) 2302c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2303c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal a(x); 2304c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_nexttoward(a.mp,y.mp); 2305c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return a; 2306c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2307c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2308c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal nextabove (const mpreal& x) 2309c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2310c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal a(x); 2311c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_nextabove(a.mp); 2312c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return a; 2313c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2314c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2315c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal nextbelow (const mpreal& x) 2316c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2317c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal a(x); 2318c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_nextbelow(a.mp); 2319c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return a; 2320c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2321c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2322c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal urandomb (gmp_randstate_t& state) 2323c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2324c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x; 2325c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_urandomb(x.mp,state); 2326c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2327c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2328c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2329c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) 2330c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// use gmp_randinit_default() to init state, gmp_randclear() to clear 2331c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal urandom (gmp_randstate_t& state, mp_rnd_t rnd_mode) 2332c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2333c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x; 2334c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_urandom(x.mp,state,rnd_mode); 2335c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2336c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2337c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 2338c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2339c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION <= MPFR_VERSION_NUM(2,4,2)) 2340c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal random2 (mp_size_t size, mp_exp_t exp) 2341c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2342c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x; 2343c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_random2(x.mp,size,exp); 2344c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2345c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2346c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 2347c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2348c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Uniformly distributed random number generation 2349c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// a = random(seed); <- initialization & first random number generation 2350c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// a = random(); <- next random numbers generation 2351c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// seed != 0 2352c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal random(unsigned int seed) 2353c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2354c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2355c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) 2356c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static gmp_randstate_t state; 2357c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static bool isFirstTime = true; 2358c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2359c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(isFirstTime) 2360c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2361c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath gmp_randinit_default(state); 2362c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath gmp_randseed_ui(state,0); 2363c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath isFirstTime = false; 2364c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 2365c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2366c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(seed != 0) gmp_randseed_ui(state,seed); 2367c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2368c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr::urandom(state); 2369c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 2370c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(seed != 0) std::srand(seed); 2371c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr::mpreal(std::rand()/(double)RAND_MAX); 2372c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 2373c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2374c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2375c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2376c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath////////////////////////////////////////////////////////////////////////// 2377c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Set/Get global properties 2378c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void mpreal::set_default_prec(mp_prec_t prec) 2379c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2380c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath default_prec = prec; 2381c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_default_prec(prec); 2382c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2383c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2384c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_prec_t mpreal::get_default_prec() 2385c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2386c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return (mpfr_get_default_prec)(); 2387c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2388c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2389c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void mpreal::set_default_base(int base) 2390c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2391c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath default_base = base; 2392c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2393c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2394c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int mpreal::get_default_base() 2395c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2396c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return default_base; 2397c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2398c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2399c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void mpreal::set_default_rnd(mp_rnd_t rnd_mode) 2400c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2401c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath default_rnd = rnd_mode; 2402c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_set_default_rounding_mode(rnd_mode); 2403c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2404c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2405c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline mp_rnd_t mpreal::get_default_rnd() 2406c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2407c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return static_cast<mp_rnd_t>((mpfr_get_default_rounding_mode)()); 2408c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2409c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2410c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void mpreal::set_double_bits(int dbits) 2411c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2412c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double_bits = dbits; 2413c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2414c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2415c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline int mpreal::get_double_bits() 2416c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2417c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return double_bits; 2418c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2419c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2420c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool mpreal::fits_in_bits(double x, int n) 2421c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2422c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int i; 2423c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double t; 2424c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return IsInf(x) || (std::modf ( std::ldexp ( std::frexp ( x, &i ), n ), &t ) == 0.0); 2425c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2426c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2427c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode) 2428c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2429c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 2430c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_pow(x.mp,x.mp,b.mp,rnd_mode); 2431c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2432c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2433c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2434c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode) 2435c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2436c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 2437c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_pow_z(x.mp,x.mp,b,rnd_mode); 2438c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2439c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2440c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2441c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode) 2442c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2443c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 2444c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_pow_ui(x.mp,x.mp,b,rnd_mode); 2445c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2446c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2447c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2448c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const mpreal& a, const unsigned int b, mp_rnd_t rnd_mode) 2449c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2450c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(a,static_cast<unsigned long int>(b),rnd_mode); 2451c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2452c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2453c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const mpreal& a, const long int b, mp_rnd_t rnd_mode) 2454c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2455c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 2456c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_pow_si(x.mp,x.mp,b,rnd_mode); 2457c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2458c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2459c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2460c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const mpreal& a, const int b, mp_rnd_t rnd_mode) 2461c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2462c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(a,static_cast<long int>(b),rnd_mode); 2463c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2464c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2465c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const mpreal& a, const long double b, mp_rnd_t rnd_mode) 2466c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2467c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(a,mpreal(b),rnd_mode); 2468c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2469c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2470c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const mpreal& a, const double b, mp_rnd_t rnd_mode) 2471c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2472c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(a,mpreal(b),rnd_mode); 2473c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2474c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2475c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode) 2476c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2477c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 2478c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_ui_pow(x.mp,a,b.mp,rnd_mode); 2479c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2480c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2481c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2482c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned int a, const mpreal& b, mp_rnd_t rnd_mode) 2483c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2484c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(static_cast<unsigned long int>(a),b,rnd_mode); 2485c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2486c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2487c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long int a, const mpreal& b, mp_rnd_t rnd_mode) 2488c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2489c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>=0) return pow(static_cast<unsigned long int>(a),b,rnd_mode); 2490c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),b,rnd_mode); 2491c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2492c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2493c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const int a, const mpreal& b, mp_rnd_t rnd_mode) 2494c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2495c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>=0) return pow(static_cast<unsigned long int>(a),b,rnd_mode); 2496c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),b,rnd_mode); 2497c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2498c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2499c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long double a, const mpreal& b, mp_rnd_t rnd_mode) 2500c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2501c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),b,rnd_mode); 2502c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2503c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2504c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const double a, const mpreal& b, mp_rnd_t rnd_mode) 2505c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2506c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),b,rnd_mode); 2507c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2508c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2509c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// pow unsigned long int 2510c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned long int a, const unsigned long int b, mp_rnd_t rnd_mode) 2511c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2512c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpreal x(a); 2513c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mpfr_ui_pow_ui(x.mp,a,b,rnd_mode); 2514c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 2515c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2516c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2517c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned long int a, const unsigned int b, mp_rnd_t rnd_mode) 2518c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2519c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(a,static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2520c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2521c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2522c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned long int a, const long int b, mp_rnd_t rnd_mode) 2523c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2524c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(b>0) return pow(a,static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2525c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow 2526c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2527c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2528c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned long int a, const int b, mp_rnd_t rnd_mode) 2529c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2530c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(b>0) return pow(a,static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2531c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow 2532c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2533c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2534c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned long int a, const long double b, mp_rnd_t rnd_mode) 2535c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2536c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow 2537c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2538c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2539c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned long int a, const double b, mp_rnd_t rnd_mode) 2540c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2541c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow 2542c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2543c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2544c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// pow unsigned int 2545c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned int a, const unsigned long int b, mp_rnd_t rnd_mode) 2546c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2547c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(static_cast<unsigned long int>(a),b,rnd_mode); //mpfr_ui_pow_ui 2548c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2549c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2550c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned int a, const unsigned int b, mp_rnd_t rnd_mode) 2551c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2552c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(static_cast<unsigned long int>(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2553c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2554c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2555c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned int a, const long int b, mp_rnd_t rnd_mode) 2556c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2557c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(b>0) return pow(static_cast<unsigned long int>(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2558c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2559c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2560c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2561c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned int a, const int b, mp_rnd_t rnd_mode) 2562c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2563c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(b>0) return pow(static_cast<unsigned long int>(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2564c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2565c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2566c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2567c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned int a, const long double b, mp_rnd_t rnd_mode) 2568c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2569c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2570c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2571c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2572c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const unsigned int a, const double b, mp_rnd_t rnd_mode) 2573c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2574c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2575c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2576c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2577c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// pow long int 2578c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long int a, const unsigned long int b, mp_rnd_t rnd_mode) 2579c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2580c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>0) return pow(static_cast<unsigned long int>(a),b,rnd_mode); //mpfr_ui_pow_ui 2581c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),b,rnd_mode); //mpfr_pow_ui 2582c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2583c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2584c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long int a, const unsigned int b, mp_rnd_t rnd_mode) 2585c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2586c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>0) return pow(static_cast<unsigned long int>(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2587c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_pow_ui 2588c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2589c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2590c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long int a, const long int b, mp_rnd_t rnd_mode) 2591c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2592c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>0) 2593c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2594c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(b>0) return pow(static_cast<unsigned long int>(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2595c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2596c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath }else{ 2597c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si 2598c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 2599c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2600c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2601c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long int a, const int b, mp_rnd_t rnd_mode) 2602c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2603c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>0) 2604c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2605c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(b>0) return pow(static_cast<unsigned long int>(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2606c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2607c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath }else{ 2608c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),static_cast<long int>(b),rnd_mode); // mpfr_pow_si 2609c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 2610c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2611c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2612c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long int a, const long double b, mp_rnd_t rnd_mode) 2613c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2614c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>=0) return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2615c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow 2616c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2617c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2618c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long int a, const double b, mp_rnd_t rnd_mode) 2619c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2620c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>=0) return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2621c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow 2622c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2623c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2624c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// pow int 2625c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const int a, const unsigned long int b, mp_rnd_t rnd_mode) 2626c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2627c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>0) return pow(static_cast<unsigned long int>(a),b,rnd_mode); //mpfr_ui_pow_ui 2628c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),b,rnd_mode); //mpfr_pow_ui 2629c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2630c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2631c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const int a, const unsigned int b, mp_rnd_t rnd_mode) 2632c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2633c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>0) return pow(static_cast<unsigned long int>(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2634c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_pow_ui 2635c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2636c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2637c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const int a, const long int b, mp_rnd_t rnd_mode) 2638c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2639c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>0) 2640c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2641c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(b>0) return pow(static_cast<unsigned long int>(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2642c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2643c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath }else{ 2644c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si 2645c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 2646c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2647c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2648c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const int a, const int b, mp_rnd_t rnd_mode) 2649c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2650c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>0) 2651c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2652c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(b>0) return pow(static_cast<unsigned long int>(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_ui_pow_ui 2653c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2654c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath }else{ 2655c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),static_cast<long int>(b),rnd_mode); // mpfr_pow_si 2656c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 2657c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2658c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2659c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const int a, const long double b, mp_rnd_t rnd_mode) 2660c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2661c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>=0) return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2662c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow 2663c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2664c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2665c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const int a, const double b, mp_rnd_t rnd_mode) 2666c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2667c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (a>=0) return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow 2668c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow 2669c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2670c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2671c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// pow long double 2672c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long double a, const long double b, mp_rnd_t rnd_mode) 2673c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2674c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),mpreal(b),rnd_mode); 2675c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2676c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2677c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long double a, const unsigned long int b, mp_rnd_t rnd_mode) 2678c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2679c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),b,rnd_mode); //mpfr_pow_ui 2680c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2681c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2682c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long double a, const unsigned int b, mp_rnd_t rnd_mode) 2683c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2684c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_pow_ui 2685c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2686c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2687c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long double a, const long int b, mp_rnd_t rnd_mode) 2688c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2689c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si 2690c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2691c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2692c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const long double a, const int b, mp_rnd_t rnd_mode) 2693c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2694c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),static_cast<long int>(b),rnd_mode); // mpfr_pow_si 2695c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2696c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2697c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const double a, const double b, mp_rnd_t rnd_mode) 2698c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2699c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),mpreal(b),rnd_mode); 2700c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2701c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2702c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const double a, const unsigned long int b, mp_rnd_t rnd_mode) 2703c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2704c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),b,rnd_mode); // mpfr_pow_ui 2705c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2706c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2707c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const double a, const unsigned int b, mp_rnd_t rnd_mode) 2708c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2709c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),static_cast<unsigned long int>(b),rnd_mode); // mpfr_pow_ui 2710c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2711c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2712c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const double a, const long int b, mp_rnd_t rnd_mode) 2713c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2714c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si 2715c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2716c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2717c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const mpreal pow(const double a, const int b, mp_rnd_t rnd_mode) 2718c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2719c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return pow(mpreal(a),static_cast<long int>(b),rnd_mode); // mpfr_pow_si 2720c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2721c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // End of mpfr namespace 2722c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2723c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Explicit specialization of std::swap for mpreal numbers 2724c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Thus standard algorithms will use efficient version of swap (due to Koenig lookup) 2725c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Non-throwing swap C++ idiom: http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-throwing_swap 2726c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace std 2727c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 2728c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template <> 2729c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void swap(mpfr::mpreal& x, mpfr::mpreal& y) 2730c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2731c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mpfr::swap(x, y); 2732c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 2733c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 2734c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2735c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif /* __MPREAL_H__ */ 2736