/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/MdcPatRec/MdcRecoUtil/MdcRecoUtil-00-01-08/MdcRecoUtil/DifNumber.h File Reference

#include <math.h>
#include <assert.h>
#include "CLHEP/Matrix/Vector.h"
#include "CLHEP/Matrix/SymMatrix.h"
#include "CLHEP/Matrix/Matrix.h"
#include "MdcRecoUtil/Code.h"
#include <iosfwd>
#include "MdcRecoUtil/DifNumber.icc"

Go to the source code of this file.

Classes

class  DifNumber

Defines

#define MATRIX_BOUND_CHECK

Functions

DifNumber solveQuad (const DifNumber &a, const DifNumber &b, const DifNumber &c, int pref, Code &code)


Define Documentation

#define MATRIX_BOUND_CHECK

Definition at line 27 of file DifNumber.h.


Function Documentation

DifNumber solveQuad ( const DifNumber a,
const DifNumber b,
const DifNumber c,
int  pref,
Code code 
)

Definition at line 91 of file DifNumber.cxx.

References DifNumber::number(), s, Code::setFail(), and Code::setSuccess().

00096 {
00097   DifNumber descr=b*b-4.0*a*c;
00098   if(descr<0.0) {               // solution not real
00099     code.setFail(1341);
00100     return DifNumber(0.0);
00101   }
00102   if(a.number()==0.0){
00103     if(b.number()==0.0) {
00104       code.setFail(1342);
00105       return DifNumber(0.0);
00106     }
00107     code.setSuccess(40);
00108     return -c/b+a*c/pow(b,3);
00109   }
00110   code.setSuccess(40);
00111   descr=sqrt(descr);
00112   DifNumber s=-b;
00113 
00114   if(pref==+1) {                // positive solution
00115     s+=descr;
00116   }else if(pref==-1){           // negative solution
00117     s-=descr;
00118   }else if(pref==0) {           // smallest solution
00119     if(s>0.0) {s-=descr;}else {s+=descr;}
00120   }else {                       // illegal prefrence
00121     code.setFail(1343);
00122     return DifNumber(0.0);
00123   }
00124   s/=2.0*a;
00125   return s;
00126 }


Generated on Tue Nov 29 23:16:55 2016 for BOSS_7.0.2 by  doxygen 1.4.7