00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00025 #ifndef QVMATH_H
00026 #define QVMATH_H
00027
00028 #ifndef M_SQRT1_2
00029 #define M_SQRT1_2 7.0710678118654752440E-1
00030 #endif
00031
00032 #ifndef M_PI
00033 #define M_PI 3.14159265358979323846264338327950288
00034 #endif
00035
00036 #ifndef M_PI_2
00037 #define M_PI_2 1.5707963267948966192E0
00038 #endif
00039
00040 #ifndef M_PI_4
00041 #define M_PI_4 0.785398163397448309615660845819875721
00042 #endif
00043
00044 #ifdef max
00045 #undef max
00046 #endif
00047
00048 #ifdef min
00049 #undef min
00050 #endif
00051
00052 #ifdef _MSC_VER
00053 #include <float.h>
00054 #define isnan(x) _isnan(x) // VC++ uses _isnan() instead of isnan()
00055 #define isinf(x) _isinf(x)
00056 #else
00057 #include <cmath>
00058 extern "C" int isnan(double);
00059 extern "C" int isinf(double);
00060 #endif
00061
00062 #include <iostream>
00063 #include <math.h>
00064
00065 #define _USE_MATH_DEFINES
00066 #include <cmath>
00067
00068 #include <qvdefines.h>
00069
00070
00071 #ifdef MKL_AVAILABLE
00072 #include <mkl.h>
00073 #include <mkl_lapack.h>
00074 #include <mkl_dss.h>
00075 #include <mkl_rci.h>
00076 #include <mkl_spblas.h>
00077 #elif GSL_AVAILABLE
00078
00079 #include <gsl/gsl_blas.h>
00080
00081
00082
00083
00084
00085 #endif
00086
00087 #ifdef GSL_AVAILABLE
00088 #include <gsl/gsl_math.h>
00089 #include <gsl/gsl_eigen.h>
00090 #include <gsl/gsl_linalg.h>
00091 #include <gsl/gsl_errno.h>
00092 #include <gsl/gsl_math.h>
00093 #include <gsl/gsl_min.h>
00094 #include <gsl/gsl_multimin.h>
00095 #include <gsl/gsl_multifit_nlin.h>
00096 #endif
00097
00098 #include <QPair>
00099 #include <QPointF>
00100 #include <QVComplex>
00101 #include <QVVector>
00102
00103 #include <qvmath/qvbitcount.h>
00104
00105 #ifndef POW2
00106 #define POW2(X) ((X)*(X))
00107 #endif
00108
00109 #ifndef SIGN
00110 #define SIGN(X) (((X)>=0)?1:-1)
00111 #endif
00112
00113 #ifndef ABS
00114 #define ABS(X) (((X)>0)?(X):(-(X)))
00115 #endif
00116
00117 #ifndef MIN
00118 #define MIN(X,Y) (((X)<(Y))?(X):(Y))
00119 #endif
00120
00121 #ifndef MAX
00122 #define MAX(X,Y) (((X)>(Y))?(X):(Y))
00123 #endif
00124
00125 #ifndef RANDOM
00126 #define RANDOM(MIN, MAX) (rand()%((MAX)-(MIN)+1) + (MIN))
00127 #endif
00128
00129 #ifndef PI
00130 #define PI (3.14159265358979323846)
00131 #endif
00132
00133 #ifndef EPSILON
00134 #define EPSILON (10E-6)
00135 #endif
00136
00138 int qvFactorial(const int n);
00139
00148 double qvCombination(const int setRange, const int subsetRange);
00149
00160 double qvAngle(const QPointF &point1, const QPointF &point2);
00161
00162 #ifndef DOXYGEN_IGNORE_THIS
00163
00164
00165 double qvAngle(const QPointF &);
00166
00169 double qvClockWiseAngle(const QPointF &, const QPointF &);
00170
00173 int qvRandom(const int minValue, const int maxValue);
00174
00177 double norm2(const QPointF &p);
00178
00181 double random(const double min, const double max);
00182 #endif
00183
00184
00185
00186
00187
00201 QVector<QVComplex> qvSolveCubicPolynomial(const double a0, const double a1, const double a2, const double a3);
00202
00222 double qvPointLineDistance(const QVVector &, const QPointF &);
00223
00229 double qvSymmetricFloor( const double value );
00230
00231 #ifndef DOXYGEN_IGNORE_THIS
00232 double relativeEuclideanDistance(const double &v1, const double &v2);
00233 double relativeEuclideanDistance(const QVVector &v1, const QVVector &v2);
00234 #endif // DOXYGEN_IGNORE_THIS
00235
00236 #endif // QVMATH_H