Math.hh
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include <vector>
7 
8 #include <boost/range/algorithm/lower_bound.hpp>
9 #include <boost/range/algorithm/upper_bound.hpp>
10 
11 namespace boca
12 {
13 
23 template<typename Value>
24 auto sqr(Value const& value)
25 {
26  return value * value;
27 }
28 
33 template<typename Value>
34 auto cube(Value const& value)
35 {
36  return value * value * value;
37 }
38 
43 template <typename Value_>
44 int sgn(Value_ value)
45 {
46  return (Value_(0) < value) - (value < Value_(0));
47 }
48 
53 template <typename Value_>
54 int LowerBound(std::vector<Value_> const& vector, Value_ value)
55 {
56  auto position = boost::range::lower_bound(vector, value, [](double value_1, double value_2) {
57  return value_1 > value_2;
58  });
59  if (position == vector.end()) return 0;
60  return position - vector.begin();
61 }
62 
67 template <typename Value_>
68 int UpperBound(std::vector<Value_> const& vector, Value_ value)
69 {
70  auto position = boost::range::upper_bound(vector, value, [](double value_1, double value_2) {
71  return value_1 > value_2;
72  });
73  if (position == vector.end()) return 0;
74  return position - vector.begin();
75 }
76 
81 double RoundError(double value);
82 
87 double RoundToDigits(double value, int digits = 3);
88 
93 double RoundToError(double value, double error);
94 
99 double FloorToDigits(double value, int digits = 2);
100 
105 double CeilToDigits(double value, int digits = 2);
106 
107 // @}
108 
109 }
auto cube(Value const &value)
cube of value
Definition: Math.hh:34
int sgn(Value_ value)
sign of value
Definition: Math.hh:44
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
double CeilToDigits(double value, int digits=2)
Ceiling to digits.
Definition: Math.cpp:28
auto sqr(Value const &value)
square of value
Definition: Math.hh:24
double FloorToDigits(double value, int digits=2)
Floor value to digits.
Definition: Math.cpp:22
int UpperBound(std::vector< Value_ > const &vector, Value_ value)
Upper bound of vector.
Definition: Math.hh:68
double RoundToDigits(double value, int digits=3)
Round value to digits.
Definition: Math.cpp:38
Boosted Collider Analysis.
Definition: Analysis.hh:15
int LowerBound(std::vector< Value_ > const &vector, Value_ value)
sign of value
Definition: Math.hh:54