6 #include "AliHLTRootTypes.h"
9 typedef Float_t AliHLTFFloat;
12 //use Ints times Digits instead of Floats
16 #define DEFMIN -1000000
17 #define DEFMAX 1000000
21 //ROOT does not know about 64 bit integer
23 typedef long long int Fnt_t;
30 AliHLTFFloat(const Double_t val=0) {Set(val);}
31 AliHLTFFloat(const AliHLTFFloat &f) {Set(f);}
32 virtual ~AliHLTFFloat();
34 AliHLTFFloat& operator = (const AliHLTFFloat &f) {Set(f); return *this;}
35 AliHLTFFloat& operator = (const Double_t f) {Set(f); return *this;}
37 operator const Double_t () const {return fVal;}
38 operator const Float_t () const {return (Float_t)fVal;}
40 operator const Fnt_t () const {return (Fnt_t)fVal;}
42 operator const Int_t () const {return (Int_t)fVal;}
45 friend ostream& operator<<(ostream &os, const AliHLTFFloat &f);
47 friend AliHLTFFloat operator + (const AliHLTFFloat &f1,const AliHLTFFloat &f2);
48 friend AliHLTFFloat operator + (const AliHLTFFloat &f1,const Double_t f2);
49 friend AliHLTFFloat operator + (const Double_t f1, const AliHLTFFloat &f2);
50 friend AliHLTFFloat operator + (const AliHLTFFloat &f1);
51 friend AliHLTFFloat operator - (const AliHLTFFloat &f1,const AliHLTFFloat &f2);
52 friend AliHLTFFloat operator - (const AliHLTFFloat &f1,const Double_t f2);
53 friend AliHLTFFloat operator - (const Double_t f1, const AliHLTFFloat &f2);
54 friend AliHLTFFloat operator - (const AliHLTFFloat &f1);
55 friend AliHLTFFloat operator * (const AliHLTFFloat &f1,const AliHLTFFloat &f2);
56 friend AliHLTFFloat operator * (const AliHLTFFloat &f1,const Double_t f2);
57 friend AliHLTFFloat operator * (const Double_t f1, const AliHLTFFloat &f2);
58 friend AliHLTFFloat operator / (const AliHLTFFloat &f1,const AliHLTFFloat &f2);
59 friend AliHLTFFloat operator / (const AliHLTFFloat &f1,const Double_t f2);
60 friend AliHLTFFloat operator / (const Double_t f1, const AliHLTFFloat &f2);
62 AliHLTFFloat& operator += (const AliHLTFFloat &f);
63 AliHLTFFloat& operator += (const Double_t f);
64 AliHLTFFloat& operator -= (const AliHLTFFloat &f);
65 AliHLTFFloat& operator -= (const Double_t f);
66 AliHLTFFloat& operator *= (const AliHLTFFloat &f);
67 AliHLTFFloat& operator *= (const Double_t f);
68 AliHLTFFloat& operator /= (const AliHLTFFloat &f);
69 AliHLTFFloat& operator /= (const Double_t f);
73 static void PrintStat();
74 static void SetParams(Int_t dig=DEFDIG,Int_t min=DEFMIN,Int_t max=DEFMAX);
75 void Set(const Double_t f=0);
76 void Set(const AliHLTFFloat &f);
77 inline Double_t GetVal() const {return fVal;}
78 inline Double_t GetExactVal() const {return fExactVal;}
79 inline Fnt_t GetValInt() const {return fVali;}
83 void Round(Double_t f);
84 Bool_t CheckUpperBound();
85 Bool_t CheckLowerBound();
86 Bool_t CheckBounds() {return (CheckUpperBound() && CheckLowerBound());}
98 static Int_t fNRounded;
99 static Int_t fNOpAdds;
100 static Int_t fNOpMults;
101 static Int_t fNOpDivs;
102 static Int_t fNOpSubs;
103 static Int_t fNOverFlow;
104 static Int_t fNUnderFlow;
105 static Double_t fNDiff;
108 ClassDef(AliHLTFFloat,1)
115 AliHLTFFloat(const Double_t val=0) {Set(val);}
116 AliHLTFFloat(const AliHLTFFloat &f) {Set(f);}
117 virtual ~AliHLTFFloat();
119 AliHLTFFloat& operator = (const AliHLTFFloat &f) {Set(f); return *this;}
120 AliHLTFFloat& operator = (const Double_t f) {Set(f); return *this;}
122 operator const Double_t () const {return fVal;}
123 operator const Float_t () const {return (Float_t)fVal;}
124 operator const Int_t () const {return (Int_t)fVal;}
126 friend ostream& operator<<(ostream &os, const AliHLTFFloat &f);
128 friend AliHLTFFloat operator + (const AliHLTFFloat &f1,const AliHLTFFloat &f2);
129 friend AliHLTFFloat operator + (const AliHLTFFloat &f1,const Double_t f2);
130 friend AliHLTFFloat operator + (const Double_t f1, const AliHLTFFloat &f2);
131 friend AliHLTFFloat operator + (const AliHLTFFloat &f1);
132 friend AliHLTFFloat operator - (const AliHLTFFloat &f1,const AliHLTFFloat &f2);
133 friend AliHLTFFloat operator - (const AliHLTFFloat &f1,const Double_t f2);
134 friend AliHLTFFloat operator - (const Double_t f1, const AliHLTFFloat &f2);
135 friend AliHLTFFloat operator - (const AliHLTFFloat &f1);
136 friend AliHLTFFloat operator * (const AliHLTFFloat &f1,const AliHLTFFloat &f2);
137 friend AliHLTFFloat operator * (const AliHLTFFloat &f1,const Double_t f2);
138 friend AliHLTFFloat operator * (const Double_t f1, const AliHLTFFloat &f2);
139 friend AliHLTFFloat operator / (const AliHLTFFloat &f1,const AliHLTFFloat &f2);
140 friend AliHLTFFloat operator / (const AliHLTFFloat &f1,const Double_t f2);
141 friend AliHLTFFloat operator / (const Double_t f1, const AliHLTFFloat &f2);
143 AliHLTFFloat& operator += (const AliHLTFFloat &f);
144 AliHLTFFloat& operator += (const Double_t f);
145 AliHLTFFloat& operator -= (const AliHLTFFloat &f);
146 AliHLTFFloat& operator -= (const Double_t f);
147 AliHLTFFloat& operator *= (const AliHLTFFloat &f);
148 AliHLTFFloat& operator *= (const Double_t f);
149 AliHLTFFloat& operator /= (const AliHLTFFloat &f);
150 AliHLTFFloat& operator /= (const Double_t f);
154 static void PrintStat();
155 static void SetParams(Int_t dig=DEFDIG,Int_t min=DEFMIN,Int_t max=DEFMAX);
156 void Set(const Double_t f=0);
157 void Set(const AliHLTFFloat &f);
158 inline Double_t GetVal() const {return fVal;}
159 inline Double_t GetExactVal() const {return fExactVal;}
163 Double_t Round(Double_t f);
164 Bool_t CheckUpperBound();
165 Bool_t CheckLowerBound();
166 Bool_t CheckBounds() {return (CheckUpperBound() && CheckLowerBound());}
171 static Int_t fDigits;
172 static Char_t fQuery[10];
178 static Int_t fNRounded;
179 static Int_t fNOpAdds;
180 static Int_t fNOpMults;
181 static Int_t fNOpDivs;
182 static Int_t fNOpSubs;
183 static Int_t fNOverFlow;
184 static Int_t fNUnderFlow;
185 static Double_t fNDiff;
188 ClassDef(AliHLTFFloat,1)
194 typedef AliHLTFFloat AliL3FFloat; // for backward compatibility