NewLang Project
Yet another programm language
Loading...
Searching...
No Matches
rational.h
Go to the documentation of this file.
1#include <memory>
2#include <string>
3#include <string_view>
4#include <stdint.h>
5
6#ifndef RATIONAL_H
7#define RATIONAL_H
8
9namespace newlang {
10
11 struct BigNum {
12 void *value;
13
14 BigNum();
15 BigNum(const int64_t var);
16 BigNum(const std::string_view str);
17 BigNum(const BigNum &copy);
18
19 BigNum & set_(const BigNum & copy);
20 BigNum & set_(const int64_t var);
21 BigNum & operator=(const BigNum & var);
22 BigNum & operator=(const int64_t var);
23 virtual ~BigNum();
24
25 struct CtxHelper {
26 void *ctx;
27 CtxHelper();
28 ~CtxHelper();
29 };
30
31 int64_t GetAsInteger() const;
32
33 /*
34 * Конвертировать длинное целое в число с плавающей точкой (с потерей точности)
35 */
36 double GetAsNumber() const;
37
38 bool SetFromString(const std::string_view str);
39 std::string GetAsString() const;
40
41 BigNum & add(const BigNum &val);
42 BigNum & sub(const BigNum &val);
43 BigNum & mul(const BigNum &val);
44 BigNum & div(const BigNum &val, BigNum &rem);
45
46 void SetOne();
47 void SetZero();
48 bool isOverflow() const;
49 bool isZero() const;
50 bool isOne() const;
51 bool isNegative() const;
52 };
53
54 class Rational {
55 public:
56
57 BigNum m_numerator; // Числитель
58 BigNum m_denominator; // Знаменатель
59
60 public:
61 // Конструктор принимает значения числителя и знаменателя
62
63 Rational();
64 Rational(const int64_t value);
65// Rational(const Rational &copy);
66 Rational(const std::string_view numerator, const std::string_view denominator);
67
68 std::shared_ptr<Rational> clone() const;
69
70 std::string GetAsString() const;
71 int64_t GetAsBoolean() const;
72 int64_t GetAsInteger() const;
73 double GetAsNumber() const;
74
75 // Сокращения дроби
76
77 void reduce();
78 Rational & set_(const int64_t value);
79 Rational & set_(const Rational &copy);
80 Rational & set_(const std::string_view numerator, const std::string_view denominator);
81
82 Rational & operator*=(const Rational &rational);
83 Rational & operator/=(const Rational &rational);
84 Rational & operator-=(const Rational &rational);
85 Rational & operator+=(const Rational &rational);
86 Rational & operator%=(const Rational &rational);
87 Rational & operator^=(const Rational &);
88 Rational & operator|=(const Rational &);
89
92 Rational & op_pow_(const Rational &rational);
93 Rational & op_div_ceil_(Rational &rational);
94
95 const Rational & op_rrshift_set(const Rational &);
96 bool op_equal(const Rational &rational) const;
97 int op_compare(const Rational &rational) const;
98 };
99};
100#endif /* RATIONAL_H */
101
Rational & operator-=(const Rational &rational)
Definition rational.cpp:330
std::string GetAsString() const
Definition rational.cpp:229
Rational & op_lshift_set(const Rational &)
Definition rational.cpp:376
Rational & op_pow_(const Rational &rational)
Definition rational.cpp:394
Rational & op_div_ceil_(Rational &rational)
Definition rational.cpp:425
bool op_equal(const Rational &rational) const
Definition rational.cpp:400
std::shared_ptr< Rational > clone() const
Definition rational.cpp:223
Rational & operator*=(const Rational &rational)
Definition rational.cpp:314
Rational & op_rshift_set(const Rational &)
Definition rational.cpp:382
Rational & operator^=(const Rational &)
Definition rational.cpp:365
const Rational & op_rrshift_set(const Rational &)
Definition rational.cpp:388
Rational & operator|=(const Rational &)
Definition rational.cpp:371
BigNum m_numerator
Definition rational.h:57
Rational & operator/=(const Rational &rational)
Definition rational.cpp:322
Rational & operator%=(const Rational &rational)
Definition rational.cpp:359
int64_t GetAsBoolean() const
Definition rational.cpp:237
int op_compare(const Rational &rational) const
Definition rational.cpp:406
Rational & set_(const int64_t value)
Definition rational.cpp:288
Rational & operator+=(const Rational &rational)
Definition rational.cpp:345
BigNum m_denominator
Definition rational.h:58
int64_t GetAsInteger() const
Definition rational.cpp:242
double GetAsNumber() const
Definition rational.cpp:259
Definition nlc.h:59
BigNum & div(const BigNum &val, BigNum &rem)
Definition rational.cpp:164
bool isOne() const
Definition rational.cpp:193
bool SetFromString(const std::string_view str)
Definition rational.cpp:121
bool isZero() const
Definition rational.cpp:188
BigNum & operator=(const BigNum &var)
Definition rational.cpp:55
BigNum & mul(const BigNum &val)
Definition rational.cpp:155
std::string GetAsString() const
Definition rational.cpp:131
bool isOverflow() const
Definition rational.cpp:183
bool isNegative() const
Definition rational.cpp:198
BigNum & sub(const BigNum &val)
Definition rational.cpp:147
virtual ~BigNum()
Definition rational.cpp:65
double GetAsNumber() const
Definition rational.cpp:88
BigNum & add(const BigNum &val)
Definition rational.cpp:139
int64_t GetAsInteger() const
Definition rational.cpp:72
BigNum & set_(const BigNum &copy)
Definition rational.cpp:39