EgtNumKernel 2.3a1 :
- piccola miglioria nel calcolo dei polinomi quadratici - ricompilazione per nuova versione 2.3.
This commit is contained in:
Binary file not shown.
+13
-15
@@ -51,7 +51,7 @@ PolynomialRoots( int nDegree, DBLVECTOR& vdPoly, DBLVECTOR& vdRoot, int* pnIter)
|
||||
if ( nDegree == 1)
|
||||
return LinearPolynomialRoots( vdPoly, vdRoot, pnIter) ;
|
||||
|
||||
// se polinomi quadratico
|
||||
// se polinomio quadratico
|
||||
if ( nDegree == 2)
|
||||
return QuadraticPolynomialRoots( vdPoly, vdRoot, pnIter) ;
|
||||
|
||||
@@ -209,21 +209,19 @@ QuadraticPolynomialRoots( DBLVECTOR& vdPoly, DBLVECTOR& vdRoot, int* pnIter)
|
||||
double q = vdPoly[0] / vdPoly[2] ;
|
||||
double Delta = p * p - q ;
|
||||
if ( abs( Delta) < DBL_EPSILON * DBL_EPSILON) {
|
||||
vdRoot.clear() ;
|
||||
vdRoot.reserve( 1) ;
|
||||
vdRoot.push_back( -p) ;
|
||||
return 1 ;
|
||||
}
|
||||
if ( Delta < 0.0) {
|
||||
}
|
||||
if ( Delta < 0.0) {
|
||||
return 0 ;
|
||||
}
|
||||
// Delta positivo
|
||||
double dSqrtD = sqrt( Delta) ;
|
||||
double r1 = -( p + copysign( dSqrtD, p)) ;
|
||||
double r2 = q / r1 ;
|
||||
if ( r1 > r2)
|
||||
swap( r1, r2) ;
|
||||
vdRoot.push_back( r1) ;
|
||||
vdRoot.push_back( r2) ;
|
||||
return 2 ;
|
||||
}
|
||||
// Delta positivo
|
||||
double dSqrtD = sqrt( Delta) ;
|
||||
double r1 = -( p + copysign( dSqrtD, p)) ;
|
||||
double r2 = q / r1 ;
|
||||
if ( r1 > r2)
|
||||
swap( r1, r2) ;
|
||||
vdRoot.push_back( r1) ;
|
||||
vdRoot.push_back( r2) ;
|
||||
return 2 ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user