4 #include "AliL3RootTypes.h"
7 typedef Float_t AliL3FFloat;
9 //use Ints times Digits instead of Floats
13 #define DEFMIN -1000000
14 #define DEFMAX 1000000
18 //ROOT does not know about 64 bit integer
20 typedef long long int Fnt_t;
27 AliL3FFloat(const Double_t val=0) {Set(val);}
28 AliL3FFloat(const AliL3FFloat &f) {Set(f);}
29 virtual ~AliL3FFloat();
31 AliL3FFloat& operator = (const AliL3FFloat &f) {Set(f); return *this;}
32 AliL3FFloat& operator = (const Double_t f) {Set(f); return *this;}
34 operator const Double_t () const {return fVal;}
35 operator const Float_t () const {return (Float_t)fVal;}
37 operator const Fnt_t () const {return (Fnt_t)fVal;}
39 operator const Int_t () const {return (Int_t)fVal;}
42 friend ostream& operator<<(ostream &os, const AliL3FFloat &f);
44 friend AliL3FFloat operator + (const AliL3FFloat &f1,const AliL3FFloat &f2);
45 friend AliL3FFloat operator + (const AliL3FFloat &f1,const Double_t f2);
46 friend AliL3FFloat operator + (const Double_t f1, const AliL3FFloat &f2);
47 friend AliL3FFloat operator + (const AliL3FFloat &f1);
48 friend AliL3FFloat operator - (const AliL3FFloat &f1,const AliL3FFloat &f2);
49 friend AliL3FFloat operator - (const AliL3FFloat &f1,const Double_t f2);
50 friend AliL3FFloat operator - (const Double_t f1, const AliL3FFloat &f2);
51 friend AliL3FFloat operator - (const AliL3FFloat &f1);
52 friend AliL3FFloat operator * (const AliL3FFloat &f1,const AliL3FFloat &f2);
53 friend AliL3FFloat operator * (const AliL3FFloat &f1,const Double_t f2);
54 friend AliL3FFloat operator * (const Double_t f1, const AliL3FFloat &f2);
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);
59 AliL3FFloat& operator += (const AliL3FFloat &f);
60 AliL3FFloat& operator += (const Double_t f);
61 AliL3FFloat& operator -= (const AliL3FFloat &f);
62 AliL3FFloat& operator -= (const Double_t f);
63 AliL3FFloat& operator *= (const AliL3FFloat &f);
64 AliL3FFloat& operator *= (const Double_t f);
65 AliL3FFloat& operator /= (const AliL3FFloat &f);
66 AliL3FFloat& operator /= (const Double_t f);
70 static void PrintStat();
71 static void SetParams(Int_t dig=DEFDIG,Int_t min=DEFMIN,Int_t max=DEFMAX);
72 void Set(const Double_t f=0);
73 void Set(const AliL3FFloat &f);
74 inline Double_t GetVal() const {return fVal;}
75 inline Double_t GetExactVal() const {return fExactVal;}
76 inline Fnt_t GetValInt() const {return fVali;}
80 void Round(Double_t f);
81 Bool_t CheckUpperBound();
82 Bool_t CheckLowerBound();
83 Bool_t CheckBounds() {return (CheckUpperBound() && CheckLowerBound());}
95 static Int_t fNRounded;
96 static Int_t fNOpAdds;
97 static Int_t fNOpMults;
98 static Int_t fNOpDivs;
99 static Int_t fNOpSubs;
100 static Int_t fNOverFlow;
101 static Int_t fNUnderFlow;
102 static Double_t fNDiff;
105 ClassDef(AliL3FFloat,1)
112 AliL3FFloat(const Double_t val=0) {Set(val);}
113 AliL3FFloat(const AliL3FFloat &f) {Set(f);}
114 virtual ~AliL3FFloat();
116 AliL3FFloat& operator = (const AliL3FFloat &f) {Set(f); return *this;}
117 AliL3FFloat& operator = (const Double_t f) {Set(f); return *this;}
119 operator const Double_t () const {return fVal;}
120 operator const Float_t () const {return (Float_t)fVal;}
121 operator const Int_t () const {return (Int_t)fVal;}
123 friend ostream& operator<<(ostream &os, const AliL3FFloat &f);
125 friend AliL3FFloat operator + (const AliL3FFloat &f1,const AliL3FFloat &f2);
126 friend AliL3FFloat operator + (const AliL3FFloat &f1,const Double_t f2);
127 friend AliL3FFloat operator + (const Double_t f1, const AliL3FFloat &f2);
128 friend AliL3FFloat operator + (const AliL3FFloat &f1);
129 friend AliL3FFloat operator - (const AliL3FFloat &f1,const AliL3FFloat &f2);
130 friend AliL3FFloat operator - (const AliL3FFloat &f1,const Double_t f2);
131 friend AliL3FFloat operator - (const Double_t f1, const AliL3FFloat &f2);
132 friend AliL3FFloat operator - (const AliL3FFloat &f1);
133 friend AliL3FFloat operator * (const AliL3FFloat &f1,const AliL3FFloat &f2);
134 friend AliL3FFloat operator * (const AliL3FFloat &f1,const Double_t f2);
135 friend AliL3FFloat operator * (const Double_t f1, const AliL3FFloat &f2);
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);
140 AliL3FFloat& operator += (const AliL3FFloat &f);
141 AliL3FFloat& operator += (const Double_t f);
142 AliL3FFloat& operator -= (const AliL3FFloat &f);
143 AliL3FFloat& operator -= (const Double_t f);
144 AliL3FFloat& operator *= (const AliL3FFloat &f);
145 AliL3FFloat& operator *= (const Double_t f);
146 AliL3FFloat& operator /= (const AliL3FFloat &f);
147 AliL3FFloat& operator /= (const Double_t f);
151 static void PrintStat();
152 static void SetParams(Int_t dig=DEFDIG,Int_t min=DEFMIN,Int_t max=DEFMAX);
153 void Set(const Double_t f=0);
154 void Set(const AliL3FFloat &f);
155 inline Double_t GetVal() const {return fVal;}
156 inline Double_t GetExactVal() const {return fExactVal;}
160 Double_t Round(Double_t f);
161 Bool_t CheckUpperBound();
162 Bool_t CheckLowerBound();
163 Bool_t CheckBounds() {return (CheckUpperBound() && CheckLowerBound());}
168 static Int_t fDigits;
169 static Char_t fQuery[10];
175 static Int_t fNRounded;
176 static Int_t fNOpAdds;
177 static Int_t fNOpMults;
178 static Int_t fNOpDivs;
179 static Int_t fNOpSubs;
180 static Int_t fNOverFlow;
181 static Int_t fNUnderFlow;
182 static Double_t fNDiff;
185 ClassDef(AliL3FFloat,1)