Warning, file /maui/brun/knumber/knumber_base.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 Copyright (C) 2001 - 2013 Evan Teran 0003 evan.teran@gmail.com 0004 0005 This program is free software: you can redistribute it and/or modify 0006 it under the terms of the GNU General Public License as published by 0007 the Free Software Foundation, either version 2 of the License, or 0008 (at your option) any later version. 0009 0010 This program is distributed in the hope that it will be useful, 0011 but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0013 GNU General Public License for more details. 0014 0015 You should have received a copy of the GNU General Public License 0016 along with this program. If not, see <http://www.gnu.org/licenses/>. 0017 */ 0018 0019 #ifndef KNUMBER_BASE_H_ 0020 #define KNUMBER_BASE_H_ 0021 0022 // Workaround: include before gmp.h to fix build with gcc-4.9 0023 #include <cstddef> 0024 #include <gmp.h> 0025 #include <mpfr.h> 0026 0027 #include <QString> 0028 0029 namespace detail { 0030 0031 class knumber_error; 0032 class knumber_integer; 0033 class knumber_fraction; 0034 class knumber_float; 0035 0036 class knumber_base { 0037 public: 0038 virtual ~knumber_base() = default; 0039 0040 public: 0041 virtual knumber_base *clone() = 0; 0042 0043 public: 0044 virtual QString toString(int precision) const = 0; 0045 virtual QString toBinaryString(int precision) const = 0; 0046 virtual QString toHexString(int precision) const = 0; 0047 virtual quint64 toUint64() const = 0; 0048 virtual qint64 toInt64() const = 0; 0049 0050 public: 0051 virtual bool is_integer() const = 0; 0052 virtual bool is_zero() const = 0; 0053 virtual int sign() const = 0; 0054 0055 public: 0056 // basic math 0057 virtual knumber_base *add(knumber_base *rhs) = 0; 0058 virtual knumber_base *sub(knumber_base *rhs) = 0; 0059 virtual knumber_base *mul(knumber_base *rhs) = 0; 0060 virtual knumber_base *div(knumber_base *rhs) = 0; 0061 virtual knumber_base *mod(knumber_base *rhs) = 0; 0062 0063 public: 0064 // logical operators 0065 virtual knumber_base *bitwise_and(knumber_base *rhs) = 0; 0066 virtual knumber_base *bitwise_xor(knumber_base *rhs) = 0; 0067 virtual knumber_base *bitwise_or(knumber_base *rhs) = 0; 0068 virtual knumber_base *bitwise_shift(knumber_base *rhs) = 0; 0069 0070 public: 0071 // algebraic functions 0072 virtual knumber_base *pow(knumber_base *rhs) = 0; 0073 virtual knumber_base *neg() = 0; 0074 virtual knumber_base *cmp() = 0; 0075 virtual knumber_base *abs() = 0; 0076 virtual knumber_base *sqrt() = 0; 0077 virtual knumber_base *cbrt() = 0; 0078 virtual knumber_base *factorial() = 0; 0079 virtual knumber_base *reciprocal() = 0; 0080 0081 public: 0082 // special functions 0083 virtual knumber_base *log2() = 0; 0084 virtual knumber_base *log10() = 0; 0085 virtual knumber_base *ln() = 0; 0086 virtual knumber_base *exp2() = 0; 0087 virtual knumber_base *exp10() = 0; 0088 virtual knumber_base *floor() = 0; 0089 virtual knumber_base *ceil() = 0; 0090 virtual knumber_base *exp() = 0; 0091 virtual knumber_base *bin(knumber_base *rhs) = 0; 0092 0093 public: 0094 // trig functions 0095 virtual knumber_base *sin() = 0; 0096 virtual knumber_base *cos() = 0; 0097 virtual knumber_base *tan() = 0; 0098 virtual knumber_base *asin() = 0; 0099 virtual knumber_base *acos() = 0; 0100 virtual knumber_base *atan() = 0; 0101 virtual knumber_base *sinh() = 0; 0102 virtual knumber_base *cosh() = 0; 0103 virtual knumber_base *tanh() = 0; 0104 virtual knumber_base *asinh() = 0; 0105 virtual knumber_base *acosh() = 0; 0106 virtual knumber_base *atanh() = 0; 0107 virtual knumber_base *tgamma() = 0; 0108 0109 public: 0110 // comparison 0111 virtual int compare(knumber_base *rhs) = 0; 0112 }; 0113 0114 } 0115 0116 #endif