--- /dev/null
+#include <iostream>\r
+#include <stdlib.h>\r
+#include <stdio.h>\r
+#include <math.h>\r
+\r
+#include "MathTools.h"\r
+\r
+\r
+using std::cout;\r
+using std::endl;\r
+\r
+#ifndef MIN\r
+#define MIN(a,b) (((a)<(b))?(a):(b))\r
+#endif\r
+\r
+#ifndef MAX\r
+#define MAX(a,b) (((a)>(b))?(a):(b))\r
+#endif\r
+\r
+#ifndef ABS\r
+#define ABS(x) ((x)>0?(x):-(x))\r
+#endif\r
+\r
+#ifndef MAXABS\r
+#define MAXABS(a,b) (ABS((a))>ABS((b)) ? ABS((a)): ABS((b)))\r
+#endif\r
+\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* Implementation *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |* Constructor *|\r
+ \*-------------------------------------*/\r
+\r
+MathTools::MathTools()\r
+ {\r
+ // rien\r
+ }\r
+\r
+MathTools::~MathTools()\r
+ {\r
+ // rien\r
+ }\r
+\r
+/*--------------------------------------*\\r
+ |* Methodes static *|\r
+ \*-------------------------------------*/\r
+\r
+/*----------------------*\\r
+ |* static *|\r
+ \*---------------------*/\r
+\r
+/*---------------*\\r
+|* Float *|\r
+\*---------------*/\r
+\r
+bool MathTools::isEquals(float x1, float x2, float epsilon)\r
+ {\r
+ bool isOk;\r
+ double delta;\r
+\r
+ if (x1 == 0 || x2 == 0)\r
+ {\r
+ delta = fabs(x1 - x2);\r
+ isOk = delta <= epsilon;\r
+ }\r
+ else\r
+ {\r
+ delta = fabs((x1 - x2) / MAXABS(x1,x2));\r
+ isOk = delta <= epsilon;\r
+ }\r
+\r
+ if (!isOk)\r
+ {\r
+ cout << "isEgale Float: (x1,x2)=(" << x1 << "," << x2 << ") : delta (Relatif) = " << delta << endl;\r
+ }\r
+\r
+ return isOk;\r
+ }\r
+\r
+\r
+bool MathTools::isEquals(float a, float b, float reference, float epsilon)\r
+ {\r
+ return fabs((a - b) / reference) <= epsilon;\r
+ }\r
+\r
+bool MathTools::isEquals(float* tabA, float* tabB, int n, float epsilon)\r
+ {\r
+ for (int i = 0; i < n; i++)\r
+ {\r
+ if (!isEquals(tabA[i], tabB[i], epsilon))\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+\r
+bool MathTools::isEqualsRelatifMax(float* tabA, float* tabB, int n, float epsilon)\r
+ {\r
+ float max = maxAbs(tabA, tabB, n);\r
+\r
+ if (max != 0)\r
+ {\r
+ for (int i = 0; i < n; i++)\r
+ {\r
+ if (!isEquals(tabA[i], tabB[i], max, epsilon))\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ return true;// tous à zero\r
+ //return isEquals(tabA, tabB, n, epsilon);\r
+ }\r
+ }\r
+\r
+/*---------------*\\r
+|* Double *|\r
+\*---------------*/\r
+\r
+bool MathTools::isEquals(double x1, double x2, double epsilon)\r
+ {\r
+ bool isOk;\r
+ double delta;\r
+ if (x1 == 0 || x2 == 0)\r
+ {\r
+ delta = fabs(x1 - x2);\r
+ isOk = delta <= epsilon;\r
+ }\r
+ else\r
+ {\r
+ delta = fabs((x1 - x2) / MAXABS(x1,x2));\r
+ isOk = delta <= epsilon;\r
+ }\r
+\r
+ if (!isOk)\r
+ {\r
+ cout << "isEgale Double : (x1,x2)=(" << x1 << "," << x2 << ") : delta (Relatif) = " << delta << endl;\r
+ }\r
+\r
+ return isOk;\r
+ }\r
+\r
+/*---------------*\\r
+|* Long *|\r
+ \*---------------*/\r
+\r
+bool MathTools::isEquals(long x1, long x2)\r
+ {\r
+ long delta = labs(x1 - x2);\r
+ bool isOk = (delta == 0);\r
+\r
+ if (!isOk)\r
+ {\r
+ cout << "isEgale Long: (x1,x2)=(" << x1 << "," << x2 << ") : delta (Relatif) = " << delta << endl;\r
+ }\r
+\r
+ return isOk;\r
+ }\r
+\r
+bool MathTools::isPower2(long i)\r
+ {\r
+ while (i >= 2)\r
+ {\r
+ if (i % 2 != 0)\r
+ {\r
+ return false;\r
+ }\r
+ i /= 2;\r
+ }\r
+ return true;\r
+ }\r
+\r
+/*---------------*\\r
+|* isPower2 *|\r
+\*---------------*/\r
+\r
+bool MathTools::isPower2(int i) // TODO operateur bit\r
+ {\r
+ while (i >= 2)\r
+ {\r
+ if (i % 2 != 0)\r
+ {\r
+ return false;\r
+ }\r
+ i /= 2;\r
+ }\r
+ return true;\r
+ }\r
+\r
+bool MathTools::isPower2(unsigned int i) // TODO operateur bit\r
+ {\r
+ while (i >= 2)\r
+ {\r
+ if (i % 2 != 0)\r
+ {\r
+ return false;\r
+ }\r
+ i /= 2;\r
+ }\r
+ return true;\r
+ }\r
+\r
+/*--------------------------------------*\\r
+ |* Methode static private *|\r
+ \*-------------------------------------*/\r
+\r
+float MathTools::maxAbs(float a, float b)\r
+ {\r
+ return MAXABS(fabs(a), fabs(b));\r
+ }\r
+\r
+float MathTools::maxAbs(float* tabA, float* tabB, int n)\r
+ {\r
+ float maxAbs = 0;\r
+\r
+ for (int i = 0; i < n; i++)\r
+ {\r
+ if (fabs(tabA[i]) > maxAbs)\r
+ {\r
+ maxAbs = fabs(tabA[i]);\r
+ }\r
+ if (fabs(tabB[i]) > maxAbs)\r
+ {\r
+ maxAbs = fabs(tabB[i]);\r
+ }\r
+ }\r
+\r
+ return maxAbs;\r
+ }\r
+\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* End *|\r
+ \*---------------------------------------------------------------------*/\r
+\r