Number.hh
Go to the documentation of this file.
1 #pragma once
2 
3 #include "boca/math/Math.hh"
4 
5 template <typename Value_>
6 class Number
7 {
8 
9 public:
10 
12  {}
13 
14  Number(Value_ const &number) :
15  number_(number)
16  {}
17 
18  Number(Value_ const &number, Value_ const &error) :
19  number_(number),
20  error_(error)
21  {}
22 
23  Value_ &Value()
24  {
25  return number_;
26  }
27 
28  Value_ &Error()
29  {
30  return error_;
31  }
32 
33  Value_ Value() const
34  {
35  return number_;
36  }
37 
38  Value_ Error() const
39  {
40  return error_;
41  }
42 
44  if(Error() > Value(0)) {
45  Error() = RoundError(Error());
46  Value() = RoundToError(Value(), Error());
47  } else {
48  Value() = RoundToDigits(Value());
49  }
50  return *this;
51  }
52 
56  friend auto &operator<<(std::ostream &stream, Number const &number)
57  {
58  stream << Stream(number.number_) << Stream(number.error_);
59  return stream;
60  }
61 
62 private:
63 
64  Value_ number_ = Value_(0);
65 
66  Value_ error_ = Value_(0);
67 
68 };
Number()
Definition: Number.hh:11
Value_ & Value()
Definition: Number.hh:23
double RoundToError(double value, double error)
Round value to precision of error.
Definition: Math.cpp:45
double RoundError(double value)
round error two two digits
Definition: Math.cpp:34
std::string Stream(Value const &message, int width=20, bool right=false)
Definition: Debug.hh:48
Value_ Error() const
Definition: Number.hh:38
Value_ & Error()
Definition: Number.hh:28
double RoundToDigits(double value, int digits=3)
Round value to digits.
Definition: Math.cpp:38
Number(Value_ const &number, Value_ const &error)
Definition: Number.hh:18
friend auto & operator<<(std::ostream &stream, Number const &number)
Output stream operator.
Definition: Number.hh:56
Value_ Value() const
Definition: Number.hh:33
Number(Value_ const &number)
Definition: Number.hh:14
Definition: Number.hh:6
Number & Round()
Definition: Number.hh:43