Cadabra
Computer algebra system for field theory problems
Loading...
Searching...
No Matches
Multiplier.hh
Go to the documentation of this file.
1#pragma once
2
3#include <iostream>
4#include <variant>
5#include <gmpxx.h>
6
7namespace cadabra {
8
9 class Multiplier {
10 private:
11 std::variant<mpq_class, double> value;
12
13 public:
14 // Constructors
15 Multiplier();
17 Multiplier(const mpq_class& v);
18 Multiplier(int v);
19 Multiplier(unsigned int v);
20 Multiplier(long v);
21 Multiplier(unsigned long v);
22 Multiplier(double v);
23
24 // Copy constructor
25 Multiplier(const Multiplier& other) = default;
26
27 // Assignment operators
30 Multiplier& operator=(const double& v);
31
32 // Type checking
33 bool is_rational() const;
34 bool is_double() const;
35
36 // Value getters
37 const mpq_class& get_rational() const;
38 double get_double() const;
39
40 // Helper method to determine result type
41 static bool result_is_double(const Multiplier& a, const Multiplier& b);
42
43 // Canonicalize if rational.
44 void canonicalize();
45
46 // Arithmetic operators
51
52 // Compound assignment operators
57
58 // Comparison operators
59 bool operator==(const Multiplier& other) const;
60 bool operator!=(const Multiplier& other) const;
61 bool operator<(const Multiplier& other) const;
62 bool operator<=(const Multiplier& other) const;
63 bool operator>(const Multiplier& other) const;
64 bool operator>=(const Multiplier& other) const;
65
66 // Stream output
67 friend std::ostream& operator<<(std::ostream& os, const Multiplier& m);
68 };
69
70}
Definition Multiplier.hh:9
Multiplier & operator*=(const Multiplier &other)
Definition Multiplier.cc:152
friend std::ostream & operator<<(std::ostream &os, const Multiplier &m)
Definition Multiplier.cc:208
bool is_double() const
Definition Multiplier.cc:63
Multiplier operator*(const Multiplier &other) const
Definition Multiplier.cc:120
Multiplier(const Multiplier &other)=default
Multiplier & operator/=(const Multiplier &other)
Definition Multiplier.cc:158
bool operator==(const Multiplier &other) const
Definition Multiplier.cc:164
static bool result_is_double(const Multiplier &a, const Multiplier &b)
Definition Multiplier.cc:86
double get_double() const
Definition Multiplier.cc:76
Multiplier & operator-=(const Multiplier &other)
Definition Multiplier.cc:146
bool operator!=(const Multiplier &other) const
Definition Multiplier.cc:173
void canonicalize()
Definition Multiplier.cc:91
std::variant< mpq_class, double > value
Definition Multiplier.hh:11
bool operator<(const Multiplier &other) const
Definition Multiplier.cc:178
Multiplier operator/(const Multiplier &other) const
Definition Multiplier.cc:130
bool operator<=(const Multiplier &other) const
Definition Multiplier.cc:188
Multiplier operator+(const Multiplier &other) const
Definition Multiplier.cc:100
Multiplier & operator+=(const Multiplier &other)
Definition Multiplier.cc:140
bool is_rational() const
Definition Multiplier.cc:58
Multiplier()
Definition Multiplier.cc:6
Multiplier & operator=(const Multiplier &other)=default
bool operator>=(const Multiplier &other) const
Definition Multiplier.cc:203
Multiplier operator-(const Multiplier &other) const
Definition Multiplier.cc:110
bool operator>(const Multiplier &other) const
Definition Multiplier.cc:198
const mpq_class & get_rational() const
Definition Multiplier.cc:68
Functions to handle the exchange properties of two or more symbols in a product.
Definition Adjform.cc:83
void set(rset_t::iterator &num, multiplier_t fac)
Definition Storage.cc:1179