1 #ifndef math_utility_H__
2 #define math_utility_H__
12 static const double PI = 3.14159265358979323846264338327950288;
18 inline T
noEPS(T value, T eps = 1e-9) {
19 T epsp((eps < T(0)) ? -eps : eps);
20 return ((value < -epsp || value > epsp) ? value : T(0));
28 return (value - lower) / (upper - lower);
36 return lower + _ratio * (upper - lower);
51 inline T
inRange(T
const& mn, T
const& mx, T
const& v) {
52 return std::min(mx, std::max(mn, v));
59 inline T
isInRange(T
const& mn, T
const& mx, T
const& x) {
60 return (mn <= x && x <= mx);
67 inline T
squ(T
const& x) {
75 inline T
cub(T
const& x) {
83 inline double average(T
const& beg, T
const& end,
double sigs) {
86 for (T it = beg; it != end; ++it, ++N) {
91 for (T it = beg; it != end; ++it) {
92 sig += (*it - av) * (*it - av);
95 double lower = av - sig * sigs, upper = av + sig * sigs;
96 double ret = 0, retn = 0;
97 for (T it = beg; it != end; ++it) {
98 if (lower <= *it && *it <= upper) {
110 inline double average(T
const& beg, T
const& end, T
const& p,
double sigs) {
113 for (T it = beg, ip = p; it != end; ++it, ++N, ++ip) {
117 for (T it = beg, ip = p; it != end; ++it, ++ip) {
118 av += *it * *ip / ps;
121 for (T it = beg, ip = p; it != end; ++it, ++ip) {
122 sig += *ip / ps * (*it - av) * (*it - av);
125 double lower = av - sig * sigs, upper = av + sig * sigs;
126 double ret = 0, retn = 0;
127 for (T it = beg, ip = p; it != end; ++it, ++ip) {
128 if (lower <= *it && *it <= upper) {
133 if (retn <= 1e-10)
return av;
142 return (t < 0 ? -t : t);
147 #endif // math_utility_H__
T normalize(T lower, T upper, T value)
(value-lower)/(upper-lower)
T isInRange(T const &mn, T const &mx, T const &x)
(mn <= x && x <= mx)
T ratioMapping(T l1, T u1, T m1, T l2, T u2)
denormalize(l2,u2,normalize(l1,u1,m1))
T denormalize(T lower, T upper, T _ratio)
(lower+_ratio*(upper-lower))
T noEPS(T value, T eps=1e-9)
如果abs(輸入的數值) < eps, 則回傳0, 否則回傳輸入的數值
double average(T const &beg, T const &end, double sigs)
只將 sigs 個標準差以內的數據拿來取平均
T tAbs(T const &t)
就只是個取絕對值
T inRange(T const &mn, T const &mx, T const &v)
std::min(mx,std::max(mn,v))
static const double PI
圓周率...