14 #ifndef __INCLUDED_SCOPIRA_BASEKIT_MATH_H__ 15 #define __INCLUDED_SCOPIRA_BASEKIT_MATH_H__ 17 #include <scopira/tool/platform.h> 20 #ifndef _USE_MATH_DEFINES 21 #define _USE_MATH_DEFINES 33 #include <scopira/tool/platform.h> 37 #define TINYNUM (1.0e-20) 41 #define SMALLNUM (1.0e-5) 44 #define IMIN(a,b) ((a) < (b) ? (a) : (b)) 45 #define FMAX(a,b) ((a) > (b) ? (a) : (b)) 46 #define SQR(a) ((a) == 0.0 ? 0.0 : a*a) 47 #define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a)) 48 #define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; 51 #define M_E 2.71828182845904523536 54 #define M_LOG2E 1.44269504088896340736 57 #define M_LOG10E 0.434294481903251827651 60 #define M_LN2 0.693147180559945309417 63 #define M_LN10 2.30258509299404568402 66 #define M_PI 3.14159265358979323846 69 #define M_PI_2 1.57079632679489661923 72 #define M_PI_4 0.785398163397448309616 75 #define M_1_PI 0.318309886183790671538 78 #define M_2_PI 0.636619772367581343076 81 #define M_2_SQRTPI 1.12837916709551257390 84 #define M_SQRT2 1.41421356237309504880 87 #define M_SQRT1_2 0.707106781186547524401 118 inline T
sqr(T v) {
return v*v; }
125 inline bool is_equal(T v1, T v2) { T tmp(v1 - v2);
return tmp<tol_c && tmp> (-
tol_c); }
133 #ifdef PLATFORM_win32 134 inline bool is_nan(
double v) {
return _isnan(v) != 0; }
135 inline bool is_nan(
float v) {
return _isnan(v) != 0; }
136 #elif defined(PLATFORM_osx) 140 inline bool is_nan(
double v) {
return std::isnan(v); }
141 inline bool is_nan(
float v) {
return std::isnan(v); }
148 inline bool is_nan(
double v) {
return isnan(v) != 0; }
154 inline bool is_nan(
float v) {
return isnan(v) != 0; }
156 #ifdef PLATFORM_win32 158 inline int is_inf(
double v) {
return !_finite(v) && !_isnan(v); }
159 inline int is_inf(
float v) {
return !_finite(v) && !_isnan(v); }
163 inline int is_inf(
double v) { assert(
false);
return 0; }
164 inline int is_inf(
float v) { assert(
false);
return 0; }
165 #elif defined(PLATFORM_osx) 166 inline int is_inf(
double v) {
return std::isinf(v); }
167 inline int is_inf(
float v) {
return std::isinf(v); }
174 inline int is_inf(
double v) {
return isinf(v); }
180 inline int is_inf(
float v) {
return isinf(v); }
191 inline T
sign(T v) {
if (v>0)
return 1;
if (v<0)
return -1;
return 0; }
const double tinynum_c
Definition: math.h:105
int is_inf(double v)
see man isinf for the meanin of the return
Definition: math.h:174
Definition: archiveflow.h:20
T sqr(T v)
Definition: math.h:118
bool is_nan(double v)
Definition: math.h:148
const double tol_c
Definition: math.h:99
const double smallnum_c
Definition: math.h:111
T sign(T v)
Definition: math.h:191
bool is_equal(T v1, T v2)
Definition: math.h:125
int binomial(int n, int i)
bool is_zero(T v)
Definition: math.h:132
int factorial(int n, int m=0)