#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 MATRIX_BOUND_CHECK |
Definition at line 27 of file DifNumber.h.
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 }