6 #include "AliL3RootTypes.h"
9 typedef Float_t AliL3FFloat;
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 AliL3FFloat(const Double_t val=0) {Set(val);}
31 AliL3FFloat(const AliL3FFloat &f) {Set(f);}
32 virtual ~AliL3FFloat();
34 AliL3FFloat& operator = (const AliL3FFloat &f) {Set(f); return *this;}
35 AliL3FFloat& 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 AliL3FFloat &f);
47 friend AliL3FFloat operator + (const AliL3FFloat &f1,const AliL3FFloat &f2);
48 friend AliL3FFloat operator + (const AliL3FFloat &f1,const Double_t f2);
49 friend AliL3FFloat operator + (const Double_t f1, const AliL3FFloat &f2);
50 friend AliL3FFloat operator + (const AliL3FFloat &f1);
51 friend AliL3FFloat operator - (const AliL3FFloat &f1,const AliL3FFloat &f2);
52 friend AliL3FFloat operator - (const AliL3FFloat &f1,const Double_t f2);
53 friend AliL3FFloat operator - (const Double_t f1, const AliL3FFloat &f2);
54 friend AliL3FFloat operator - (const AliL3FFloat &f1);
55 friend AliL3FFloat operator * (const AliL3FFloat &f1,const AliL3FFloat &f2);
56 friend AliL3FFloat operator * (const AliL3FFloat &f1,const Double_t f2);
57 friend AliL3FFloat operator * (const Double_t f1, const AliL3FFloat &f2);
58 friend AliL3FFloat operator / (const AliL3FFloat &f1,const AliL3FFloat &f2);
59 friend AliL3FFloat operator / (const AliL3FFloat &f1,const Double_t f2);
60 friend AliL3FFloat operator / (const Double_t f1, const AliL3FFloat &f2);
62 AliL3FFloat& operator += (const AliL3FFloat &f);
63 AliL3FFloat& operator += (const Double_t f);
64 AliL3FFloat& operator -= (const AliL3FFloat &f);
65 AliL3FFloat& operator -= (const Double_t f);
66 AliL3FFloat& operator *= (const AliL3FFloat &f);
67 AliL3FFloat& operator *= (const Double_t f);
68 AliL3FFloat& operator /= (const AliL3FFloat &f);
69 AliL3FFloat& 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 AliL3FFloat &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(AliL3FFloat,1)
115 AliL3FFloat(const Double_t val=0) {Set(val);}
116 AliL3FFloat(const AliL3FFloat &f) {Set(f);}
117 virtual ~AliL3FFloat();
119 AliL3FFloat& operator = (const AliL3FFloat &f) {Set(f); return *this;}
120 AliL3FFloat& 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 AliL3FFloat &f);
128 friend AliL3FFloat operator + (const AliL3FFloat &f1,const AliL3FFloat &f2);
129 friend AliL3FFloat operator + (const AliL3FFloat &f1,const Double_t f2);
130 friend AliL3FFloat operator + (const Double_t f1, const AliL3FFloat &f2);
131 friend AliL3FFloat operator + (const AliL3FFloat &f1);
132 friend AliL3FFloat operator - (const AliL3FFloat &f1,const AliL3FFloat &f2);
133 friend AliL3FFloat operator - (const AliL3FFloat &f1,const Double_t f2);
134 friend AliL3FFloat operator - (const Double_t f1, const AliL3FFloat &f2);
135 friend AliL3FFloat operator - (const AliL3FFloat &f1);
136 friend AliL3FFloat operator * (const AliL3FFloat &f1,const AliL3FFloat &f2);
137 friend AliL3FFloat operator * (const AliL3FFloat &f1,const Double_t f2);
138 friend AliL3FFloat operator * (const Double_t f1, const AliL3FFloat &f2);
139 friend AliL3FFloat operator / (const AliL3FFloat &f1,const AliL3FFloat &f2);
140 friend AliL3FFloat operator / (const AliL3FFloat &f1,const Double_t f2);
141 friend AliL3FFloat operator / (const Double_t f1, const AliL3FFloat &f2);
143 AliL3FFloat& operator += (const AliL3FFloat &f);
144 AliL3FFloat& operator += (const Double_t f);
145 AliL3FFloat& operator -= (const AliL3FFloat &f);
146 AliL3FFloat& operator -= (const Double_t f);
147 AliL3FFloat& operator *= (const AliL3FFloat &f);
148 AliL3FFloat& operator *= (const Double_t f);
149 AliL3FFloat& operator /= (const AliL3FFloat &f);
150 AliL3FFloat& 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 AliL3FFloat &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(AliL3FFloat,1)