22 #ifndef FIFE_UTIL_FIFE_MATH_H 23 #define FIFE_UTIL_FIFE_MATH_H 41 #define ABS(x) ((x)<0?-(x):(x)) 46 #if defined( WIN32 ) && defined( _MSC_VER ) 47 inline double round(
const double x) {
48 return x < 0.0 ? ceil(x - 0.5) : floor(x + 0.5);
55 static const float FLT_STD_MAX = (std::numeric_limits<float>::max)();
57 static const float FLT_PI = 4.0f*std::atan(1.0f);
70 static const double DBL_STD_MAX = (std::numeric_limits<double>::max)();
72 static const double DBL_PI = 4.0*std::atan(1.0);
93 static inline float_type
pi() {
return FLT_PI; }
125 template <
typename T>
131 static inline num_type
epsilon() {
return traits_type::epsilon(); }
132 static inline num_type
zeroTolerance() {
return traits_type::zeroTolerance(); }
133 static inline num_type
max() {
return traits_type::max(); }
134 static inline num_type
pi() {
return traits_type::pi(); }
135 static inline num_type
twoPi() {
return traits_type::twoPi(); }
136 static inline num_type
halfPi() {
return traits_type::halfPi(); }
137 static inline num_type
inversePi() {
return traits_type::inversePi(); }
138 static inline num_type
inverseTwoPi() {
return traits_type::inverseTwoPi(); }
139 static inline num_type
degToRad() {
return traits_type::degToRad(); }
140 static inline num_type
radToDeg() {
return traits_type::radToDeg(); }
141 static inline num_type
log2() {
return traits_type::log2(); }
142 static inline num_type
log10() {
return traits_type::log10(); }
143 static inline num_type
invLog2() {
return traits_type::invLog2(); }
144 static inline num_type
invLog10() {
return traits_type::invLog10(); }
146 static T ACos(T _val);
147 static T ASin(T _val);
148 static T ATan(T _val);
149 static T ATan2(T _x, T _y);
150 static T Ceil(T _val);
151 static T Cos(T _val);
152 static T Exp(T _val);
153 static T FAbs(T _val);
154 static T Floor(T _val);
155 static T FMod (T _x, T _y);
156 static T InvSqrt(T _val);
157 static T Log(T _val);
158 static T Log2(T _val);
159 static T Log10(T _val);
160 static T Pow(T _base, T _exponent);
161 static T Sin(T _val);
162 static T Sqr(T _val);
163 static T Sqrt(T _val);
164 static T Tan(T _val);
165 static bool Equal(T _val1, T _val2);
173 if (-static_cast<T>(1) < _val) {
174 if (_val < static_cast<T>(1)) {
175 return static_cast<T
>(std::acos(_val));
178 return static_cast<T
>(0);
188 if (-static_cast<T>(1) < _val) {
189 if (_val < static_cast<T>(1)) {
190 return static_cast<T
>(std::asin(_val));
203 return static_cast<T
>(std::atan(_val));
208 return static_cast<T
>(std::atan2(_x, _y));
213 return static_cast<T
>(std::ceil(_val));
218 return static_cast<T
>(std::cos(_val));
223 return static_cast<T
>(std::exp(_val));
228 return static_cast<T
>(std::fabs(_val));
233 return static_cast<T
>(std::floor(_val));
238 return static_cast<T
>(std::fmod(_x, _y));
243 return static_cast<T
>(1/std::sqrt(_val));
248 return static_cast<T
>(std::log(_val));
253 return invLog2() *
static_cast<T
>(std::log(_val));
258 return invLog10() *
static_cast<T
>(std::log(_val));
263 return static_cast<T
>(std::pow(_base, _exponent));
268 return static_cast<T
>(std::sin(_val));
278 return static_cast<T
>(std::sqrt(_val));
283 return static_cast<T
>(std::tan(_val));
288 return std::fabs(_val1 - _val2) < epsilon();
305 #endif // FIFE_UTIL_FIFE_MATH_H static T ATan2(T _x, T _y)
static float_type inverseTwoPi()
static num_type invLog10()
static const double DBL_PI
static float_type invLog2()
static const double DBL_LOG_10
static num_type radToDeg()
static const float FLT_TWO_PI
static float_type invLog2()
static const double DBL_STD_MAX
static float_type twoPi()
unsigned nextPow2(unsigned x)
Returns the next higher power of 2 based on the passed argument.
static float_type epsilon()
static const float FLT_DEG_TO_RAD
static float_type invLog10()
static const float FLT_INVERSE_PI
static float_type inversePi()
static const float FLT_LOG_2
static const double DBL_INV_LOG_10
static float_type inverseTwoPi()
static float_type zeroTolerance()
static float_type invLog10()
static float_type radToDeg()
static const double DBL_LOG_2
static num_type zeroTolerance()
static float_type log10()
static num_type degToRad()
static const float FLT_HALF_PI
static const float FLT_INV_LOG_10
static T Pow(T _base, T _exponent)
static bool Equal(T _val1, T _val2)
static const float FLT_INVERSE_TWO_PI
static float_type twoPi()
static const double DBL_INVERSE_TWO_PI
static num_type inverseTwoPi()
static const double DBL_TWO_PI
static const double DBL_DEG_TO_RAD
static const double DBL_HALF_PI
static float_type log10()
static const double DBL_STD_EPSILON
static const float FLT_RAD_TO_DEG
static float_type degToRad()
static const double DBL_ZERO_TOLERANCE
static const double DBL_INVERSE_PI
static const double DBL_INV_LOG_2
static num_type epsilon()
static float_type inversePi()
static const float FLT_INV_LOG_2
static const float FLT_PI
static float_type halfPi()
static const double DBL_RAD_TO_DEG
static float_type radToDeg()
static const float FLT_ZERO_TOLERANCE
static const float FLT_STD_EPSILON
static const float FLT_STD_MAX
static float_type zeroTolerance()
float_traits< num_type > traits_type
static float_type degToRad()
static float_type halfPi()
static num_type invLog2()
static num_type inversePi()
static T FMod(T _x, T _y)
static float_type epsilon()
static const float FLT_LOG_10