]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/misc/AliHLTFFloat.h
- Changed module names to be the same as the libraries names;
[u/mrichter/AliRoot.git] / HLT / misc / AliHLTFFloat.h
1 // @(#) $Id$
2
3 #ifndef ALIL3FFLOAT_H
4 #define ALIL3FFLOAT_H
5
6 #include "AliHLTRootTypes.h"
7
8 #ifndef USEFFLOAT
9 typedef Float_t AliHLTFFloat;
10 #else 
11
12 //use Ints times Digits instead of Floats
13 #define USEINTS
14
15 #define DEFDIG 100
16 #define DEFMIN -1000000
17 #define DEFMAX  1000000
18
19 #ifdef USEINTS
20
21 //ROOT does not know about 64 bit integer
22 #ifdef no_root
23 typedef long long int Fnt_t;
24 #else 
25 typedef Int_t Fnt_t;
26 #endif
27
28 class AliHLTFFloat {
29  public:
30   AliHLTFFloat(const Double_t val=0) {Set(val);}
31   AliHLTFFloat(const AliHLTFFloat &f) {Set(f);}
32   virtual ~AliHLTFFloat();
33
34   AliHLTFFloat& operator = (const AliHLTFFloat &f)  {Set(f); return *this;}
35   AliHLTFFloat& operator = (const Double_t f)      {Set(f); return *this;}
36
37   operator const Double_t () const {return fVal;}
38   operator const Float_t  () const {return (Float_t)fVal;}
39 #ifdef no_root
40   operator const Fnt_t    () const {return (Fnt_t)fVal;}
41 #endif
42   operator const Int_t    () const {return (Int_t)fVal;}  
43
44
45   friend ostream& operator<<(ostream &os, const AliHLTFFloat &f);
46
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);
61
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);
70   //==,!=,>=, ...
71   //++,--
72
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;}
80
81  private:
82
83   void   Round(Double_t f);
84   Bool_t CheckUpperBound();
85   Bool_t CheckLowerBound();
86   Bool_t CheckBounds() {return (CheckUpperBound() && CheckLowerBound());}
87
88   Fnt_t   fVali;
89   Double_t fVal;
90   Double_t fExactVal;
91
92   static Int_t fDigits;
93   static Int_t fMax; 
94   static Int_t fMin; 
95
96 #ifdef CALCSTATS
97   static Int_t fN;
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;
106 #endif
107
108   ClassDef(AliHLTFFloat,1)
109 };
110
111 #else
112
113 class AliHLTFFloat {
114  public:
115   AliHLTFFloat(const Double_t val=0) {Set(val);}
116   AliHLTFFloat(const AliHLTFFloat &f) {Set(f);}
117   virtual ~AliHLTFFloat();
118
119   AliHLTFFloat& operator = (const AliHLTFFloat &f)  {Set(f); return *this;}
120   AliHLTFFloat& operator = (const Double_t f)      {Set(f); return *this;}
121
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;}
125
126   friend ostream& operator<<(ostream &os, const AliHLTFFloat &f);
127
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);
142
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);
151   //==,!=,>=, ...
152   //++,--
153
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;}
160
161  private:
162
163   Double_t Round(Double_t f);
164   Bool_t CheckUpperBound();
165   Bool_t CheckLowerBound();
166   Bool_t CheckBounds() {return (CheckUpperBound() && CheckLowerBound());}
167
168   Double_t fVal;
169   Double_t fExactVal;
170
171   static Int_t fDigits;
172   static Char_t fQuery[10];
173   static Int_t fMax;
174   static Int_t fMin;
175
176 #ifdef CALCSTATS
177   static Int_t fN;
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;
186 #endif
187
188   ClassDef(AliHLTFFloat,1)
189 };
190
191 #endif
192 #endif
193
194 typedef AliHLTFFloat AliL3FFloat; // for backward compatibility
195
196 #endif
197
198
199
200