diff --git a/modules/core/src/lapack.cpp b/modules/core/src/lapack.cpp index f67808559c..6df9454943 100644 --- a/modules/core/src/lapack.cpp +++ b/modules/core/src/lapack.cpp @@ -217,10 +217,10 @@ bool Cholesky(double* A, int m, double* b, int n) * Determinant of the matrix * \****************************************************************************************/ -#define det2(m) (m(0,0)*m(1,1) - m(0,1)*m(1,0)) -#define det3(m) (m(0,0)*(m(1,1)*m(2,2) - m(1,2)*m(2,1)) - \ - m(0,1)*(m(1,0)*m(2,2) - m(1,2)*m(2,0)) + \ - m(0,2)*(m(1,0)*m(2,1) - m(1,1)*m(2,0))) +#define det2(m) ((double)m(0,0)*m(1,1) - (double)m(0,1)*m(1,0)) +#define det3(m) (m(0,0)*((double)m(1,1)*m(2,2) - (double)m(1,2)*m(2,1)) - \ + m(0,1)*((double)m(1,0)*m(2,2) - (double)m(1,2)*m(2,0)) + \ + m(0,2)*((double)m(1,0)*m(2,1) - (double)m(1,1)*m(2,0))) double determinant( const Mat& mat ) { @@ -405,17 +405,17 @@ double invert( const Mat& src, Mat& dst, int method ) result = d; d = 1./d; - t[0] = (float)((Sf(1,1) * Sf(2,2) - Sf(1,2) * Sf(2,1)) * d); - t[1] = (float)((Sf(0,2) * Sf(2,1) - Sf(0,1) * Sf(2,2)) * d); - t[2] = (float)((Sf(0,1) * Sf(1,2) - Sf(0,2) * Sf(1,1)) * d); - - t[3] = (float)((Sf(1,2) * Sf(2,0) - Sf(1,0) * Sf(2,2)) * d); - t[4] = (float)((Sf(0,0) * Sf(2,2) - Sf(0,2) * Sf(2,0)) * d); - t[5] = (float)((Sf(0,2) * Sf(1,0) - Sf(0,0) * Sf(1,2)) * d); - - t[6] = (float)((Sf(1,0) * Sf(2,1) - Sf(1,1) * Sf(2,0)) * d); - t[7] = (float)((Sf(0,1) * Sf(2,0) - Sf(0,0) * Sf(2,1)) * d); - t[8] = (float)((Sf(0,0) * Sf(1,1) - Sf(0,1) * Sf(1,0)) * d); + t[0] = (float)(((double)Sf(1,1) * Sf(2,2) - (double)Sf(1,2) * Sf(2,1)) * d); + t[1] = (float)(((double)Sf(0,2) * Sf(2,1) - (double)Sf(0,1) * Sf(2,2)) * d); + t[2] = (float)(((double)Sf(0,1) * Sf(1,2) - (double)Sf(0,2) * Sf(1,1)) * d); + + t[3] = (float)(((double)Sf(1,2) * Sf(2,0) - (double)Sf(1,0) * Sf(2,2)) * d); + t[4] = (float)(((double)Sf(0,0) * Sf(2,2) - (double)Sf(0,2) * Sf(2,0)) * d); + t[5] = (float)(((double)Sf(0,2) * Sf(1,0) - (double)Sf(0,0) * Sf(1,2)) * d); + + t[6] = (float)(((double)Sf(1,0) * Sf(2,1) - (double)Sf(1,1) * Sf(2,0)) * d); + t[7] = (float)(((double)Sf(0,1) * Sf(2,0) - (double)Sf(0,0) * Sf(2,1)) * d); + t[8] = (float)(((double)Sf(0,0) * Sf(1,1) - (double)Sf(0,1) * Sf(1,0)) * d); Df(0,0) = t[0]; Df(0,1) = t[1]; Df(0,2) = t[2]; Df(1,0) = t[3]; Df(1,1) = t[4]; Df(1,2) = t[5]; @@ -607,10 +607,10 @@ bool solve( const Mat& src, const Mat& _src2, Mat& dst, int method ) double d = det2(Sf); if( d != 0. ) { - float t; + double t; d = 1./d; - t = (float)((bf(0)*Sf(1,1) - bf(1)*Sf(0,1))*d); - Df(1,0) = (float)((bf(1)*Sf(0,0) - bf(0)*Sf(1,0))*d); + t = (float)(((double)bf(0)*Sf(1,1) - (double)bf(1)*Sf(0,1))*d); + Df(1,0) = (float)(((double)bf(1)*Sf(0,0) - (double)bf(0)*Sf(1,0))*d); Df(0,0) = t; } else @@ -642,19 +642,19 @@ bool solve( const Mat& src, const Mat& _src2, Mat& dst, int method ) d = 1./d; t[0] = (float)(d* - (bf(0)*(Sf(1,1)*Sf(2,2) - Sf(1,2)*Sf(2,1)) - - Sf(0,1)*(bf(1)*Sf(2,2) - Sf(1,2)*bf(2)) + - Sf(0,2)*(bf(1)*Sf(2,1) - Sf(1,1)*bf(2)))); + (bf(0)*((double)Sf(1,1)*Sf(2,2) - (double)Sf(1,2)*Sf(2,1)) - + Sf(0,1)*((double)bf(1)*Sf(2,2) - (double)Sf(1,2)*bf(2)) + + Sf(0,2)*((double)bf(1)*Sf(2,1) - (double)Sf(1,1)*bf(2)))); t[1] = (float)(d* - (Sf(0,0)*(bf(1)*Sf(2,2) - Sf(1,2)*bf(2)) - - bf(0)*(Sf(1,0)*Sf(2,2) - Sf(1,2)*Sf(2,0)) + - Sf(0,2)*(Sf(1,0)*bf(2) - bf(1)*Sf(2,0)))); + (Sf(0,0)*(double)(bf(1)*Sf(2,2) - (double)Sf(1,2)*bf(2)) - + bf(0)*((double)Sf(1,0)*Sf(2,2) - (double)Sf(1,2)*Sf(2,0)) + + Sf(0,2)*((double)Sf(1,0)*bf(2) - (double)bf(1)*Sf(2,0)))); t[2] = (float)(d* - (Sf(0,0)*(Sf(1,1)*bf(2) - bf(1)*Sf(2,1)) - - Sf(0,1)*(Sf(1,0)*bf(2) - bf(1)*Sf(2,0)) + - bf(0)*(Sf(1,0)*Sf(2,1) - Sf(1,1)*Sf(2,0)))); + (Sf(0,0)*((double)Sf(1,1)*bf(2) - (double)bf(1)*Sf(2,1)) - + Sf(0,1)*((double)Sf(1,0)*bf(2) - (double)bf(1)*Sf(2,0)) + + bf(0)*((double)Sf(1,0)*Sf(2,1) - (double)Sf(1,1)*Sf(2,0)))); Df(0,0) = t[0]; Df(1,0) = t[1];