00001 #ifndef MATH_REAL_H
00002 #define MATH_REAL_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00033 #include <glt/config.h>
00034
00035 #include <cfloat>
00036 #include <cmath>
00037
00038
00039
00040
00041
00042
00043
00044
00045 #define M_PI 3.14159265358979323846
00046 #define M_E 2.7182818284590452354
00047 #define M_LOG2E 1.4426950408889634074
00048 #define M_LOG10E 0.43429448190325182765
00049 #define M_LN2 0.69314718055994530942
00050 #define M_LN10 2.30258509299404568402
00051 #define M_PI_2 1.57079632679489661923
00052 #define M_PI_4 0.78539816339744830962
00053 #define M_1_PI 0.31830988618379067154
00054 #define M_2_PI 0.63661977236758134308
00055
00056 #ifndef M_SQRTPI
00057 #define M_SQRTPI 1.77245385090551602729
00058 #endif
00059
00060 #define M_2_SQRTPI 1.12837916709551257390
00061 #define M_SQRT2 1.41421356237309504880
00062
00063 #ifndef M_SQRT3
00064 #define M_SQRT3 1.73205080756887729352
00065 #endif
00066
00067 #define M_SQRT1_2 0.70710678118654752440
00068 #define M_LNPI 1.14472988584940017414
00069 #define M_EULER 0.57721566490153286061
00070
00071
00072
00073 #define M_PI_DEG (M_PI/180.0)
00074 #define M_DEG_PI (180.0/M_PI)
00075 #define M_2PI (2.0*M_PI)
00076
00078 template <class A> A SQ(A a) { return a*a; }
00079
00081
00082
00083 template <class A> bool SAME_SIGN(A a, A b) { return (a<0 && b<0 || a>0 && b>0); }
00084 template <class A> A CLAMP(const A x, const A min_v, const A max_v) { return x<min_v? min_v: (x>max_v? max_v: x); }
00085 template <class A> A LERP(const A &a,const A &b,const double t) { return a*(1.0-t) + b*t; }
00086
00087
00088
00089
00090
00091
00092
00093 #define MAX(x,y) (((x)>(y)) ? (x) : (y))
00094 #define MIN(x,y) (((x)<(y)) ? (x) : (y))
00095
00096 #endif