File indexing completed on 2024-03-24 05:52:53
0001 /* 0002 SPDX-FileCopyrightText: 2001-2013 Evan Teran <evan.teran@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "knumber_base.h" 0010 0011 class KNumber; 0012 0013 namespace detail 0014 { 0015 class knumber_error : public knumber_base 0016 { 0017 friend class ::KNumber; 0018 friend class knumber_integer; 0019 friend class knumber_fraction; 0020 friend class knumber_float; 0021 0022 public: 0023 enum Error { ERROR_UNDEFINED, ERROR_POS_INFINITY, ERROR_NEG_INFINITY }; 0024 0025 public: 0026 explicit knumber_error(const QString &s); 0027 explicit knumber_error(Error e); 0028 knumber_error(); 0029 ~knumber_error() override; 0030 0031 public: 0032 QString toString(int precision) const override; 0033 quint64 toUint64() const override; 0034 qint64 toInt64() const override; 0035 0036 public: 0037 bool is_integer() const override; 0038 bool is_zero() const override; 0039 int sign() const override; 0040 0041 public: 0042 knumber_base *add(knumber_base *rhs) override; 0043 knumber_base *sub(knumber_base *rhs) override; 0044 knumber_base *mul(knumber_base *rhs) override; 0045 knumber_base *div(knumber_base *rhs) override; 0046 knumber_base *mod(knumber_base *rhs) override; 0047 0048 public: 0049 knumber_base *bitwise_and(knumber_base *rhs) override; 0050 knumber_base *bitwise_xor(knumber_base *rhs) override; 0051 knumber_base *bitwise_or(knumber_base *rhs) override; 0052 knumber_base *bitwise_shift(knumber_base *rhs) override; 0053 0054 public: 0055 knumber_base *pow(knumber_base *rhs) override; 0056 knumber_base *neg() override; 0057 knumber_base *cmp() override; 0058 knumber_base *abs() override; 0059 knumber_base *sqrt() override; 0060 knumber_base *cbrt() override; 0061 knumber_base *factorial() override; 0062 knumber_base *reciprocal() override; 0063 knumber_base *tgamma() override; 0064 0065 public: 0066 knumber_base *log2() override; 0067 knumber_base *log10() override; 0068 knumber_base *ln() override; 0069 knumber_base *exp2() override; 0070 knumber_base *exp10() override; 0071 knumber_base *floor() override; 0072 knumber_base *ceil() override; 0073 knumber_base *exp() override; 0074 knumber_base *bin(knumber_base *rhs) override; 0075 0076 public: 0077 knumber_base *sin() override; 0078 knumber_base *cos() override; 0079 knumber_base *tan() override; 0080 knumber_base *asin() override; 0081 knumber_base *acos() override; 0082 knumber_base *atan() override; 0083 knumber_base *sinh() override; 0084 knumber_base *cosh() override; 0085 knumber_base *tanh() override; 0086 knumber_base *asinh() override; 0087 knumber_base *acosh() override; 0088 knumber_base *atanh() override; 0089 0090 public: 0091 int compare(knumber_base *rhs) override; 0092 0093 private: 0094 // conversion constructors 0095 explicit knumber_error(const knumber_integer *value); 0096 explicit knumber_error(const knumber_fraction *value); 0097 explicit knumber_error(const knumber_float *value); 0098 explicit knumber_error(const knumber_error *value); 0099 0100 public: 0101 knumber_base *clone() override; 0102 0103 private: 0104 Error error_; 0105 }; 0106 0107 } 0108