00001
00002 #ifndef KERNEL_MATHHELPERFUN_H
00003 #define KERNEL_MATHHELPERFUN_H 1
00004
00005
00006
00013 namespace Gaudi {
00014 namespace Math
00015 {
00016
00025 template < class OUTPUTTYPE >
00026 inline unsigned int
00027 SolveQuadraticEquation( const double a,
00028 const double b,
00029 const double c,
00030 OUTPUTTYPE out )
00031 {
00032 if( 0 == a )
00033 {
00034
00035 if( b == 0 ) { return 0 ; }
00036
00037 *out++ = -1.0 * c / b ;
00038 *out++ = -1.0 * c / b ;
00039 return 1;
00040 }
00041 double d = b * b - 4.0 * a * c ;
00042
00043 if( d < 0 ) { return 0; }
00044
00045 d = sqrt( d ) ;
00046 *out++ = 0.5 * ( -b - d ) / a ;
00047 *out++ = 0.5 * ( -b + d ) / a ;
00048
00049 return 0 == d ? 1 : 2 ;
00050 };
00051
00052
00053 };
00054
00055 };
00056 #endif // KERNEL_MATHHELPERFUN_H