DGtal  1.1.0
BasicMathFunctions.h
1
17 #pragma once
18
33 #if defined(BasicMathFunctions_RECURSES)
34 #error Recursive header files inclusion detected in BasicMathFunctions.h
35 #else // defined(BasicMathFunctions_RECURSES)
36
37 #define BasicMathFunctions_RECURSES
38
39 #if !defined BasicMathFunctions_h
40
41 #define BasicMathFunctions_h
42
44 // Inclusions
45 #include <algorithm>
46 #include <functional>
47 #include "DGtal/base/Common.h"
48 #include "DGtal/base/Bits.h"
49 #include "DGtal/kernel/NumberTraits.h"
51
52 namespace DGtal
53 {
54  namespace functions
55  {
56
72  template<typename T>
73  T power(const T&aVal, const unsigned int exponent)
74  {
75  unsigned int q=exponent;
76  T p(aVal);
77
78  if (exponent == 0) { return 1; }
79
80  T result = NumberTraits<T>::ONE;
81  while (q != 0)
82  {
83  if (q % 2 == 1) { // q is odd
84  result *= p;
85  q--;
86  }
87  p *= p;
88  q /= 2;
89  }
90  return result;
91  }
92
93
101  template<typename T>
102  T roundToUpperPowerOfTwo(const T &n){
103  return (T) 1 << (1+DGtal::Bits::mostSignificantBit( (unsigned int) n-1 ) );
104  }
105
115  template<typename T>
116  T abs(const T & a)
117  {
118  BOOST_CONCEPT_ASSERT((boost::LessThanComparable<T>));
119  if (a<0)
120  return -a;
121  else
122  return a;
123  }
124
131  template <typename T>
132  inline
133  T square( T x )
134  { return x * x; }
135
142  template <typename T>
143  inline
144  T cube( T x )
145  { return x * x * x; }
146
147  } // namespace functions
148 } // namespace DGTal
149
150
151
153
154 #endif // !defined BasicMathFunctions_h
155
156 #undef BasicMathFunctions_RECURSES
157 #endif // else defined(BasicMathFunctions_RECURSES)
DGtal::functions::cube
T cube(T x)
Definition: BasicMathFunctions.h:144
DGtal::NumberTraits
Aim: The traits class for all models of Cinteger.
Definition: NumberTraits.h:533
boost::LessThanComparable
Go to http://www.sgi.com/tech/stl/LessThanComparable.html.
Definition: Boost.dox:48
DGtal::Bits::mostSignificantBit
static unsigned int mostSignificantBit(DGtal::uint8_t n)
Definition: Bits.h:343
DGtal::functions::roundToUpperPowerOfTwo
T roundToUpperPowerOfTwo(const T &n)
Definition: BasicMathFunctions.h:102
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
Definition: ClosedIntegerHalfPlane.h:49
DGtal::functions::square
T square(T x)
Definition: BasicMathFunctions.h:133
DGtal::functions::abs
T abs(const T &a)
Definition: BasicMathFunctions.h:116
DGtal::functions::power
T power(const T &aVal, const unsigned int exponent)
Definition: BasicMathFunctions.h:73