1 #ifndef _real_h
2 #define _real_h
3
4 // copied from math.h
5 // #ifndef M_PI
6 // # define M_PI 3.14159265358979323846
7 // #endif
8
9 #if (!REAL_IS_CLASS)
10 # if (REAL_IS_FLOAT)
11 typedef float Real;
12 # else
13 typedef double Real;
14 # endif
15 # define _RealZero 0.0
16 #else
17
18 class Real {
19 public:
Real(const Real & r)20 Real(const Real &r) { d=r.d; }
Real(int l_val)21 Real(int l_val) { d = (double)l_val; }
Real(double d_val)22 Real(double d_val) { d = d_val; }
Real()23 Real() { }
24 operator double() const { return (double)d; }
25 // operator int() const { return (int)d; }
26
27 const Real& operator=(const Real &z);
28
29 inline const Real& operator+=(const Real &z);
30 inline const Real& operator+=(double d);
31 inline Real Real::operator+(const Real&) const;
32 friend inline Real operator+(double, const Real&);
33 friend inline Real operator+(const Real&, double);
34
35 inline const Real& operator-=(const Real &z);
36 inline const Real& operator-=(double d);
37 inline Real Real::operator-(const Real&) const;
38 friend inline Real operator-(double, const Real&);
39 friend inline Real operator-(const Real&, double);
40
41 inline const Real& operator*=(const Real &z);
42 inline const Real& operator*=(double d);
43 inline Real Real::operator*(const Real&) const;
44 friend inline Real operator*(double, const Real&);
45 friend inline Real operator*(const Real&, double);
46
47 inline const Real& operator/=(const Real &z);
48 inline const Real& operator/=(double d);
49 inline Real Real::operator/(const Real&) const;
50 friend inline Real operator/(double, const Real&);
51 friend inline Real operator/(const Real&, double);
52
53 friend inline int operator==(const Real&, const Real&);
54 friend inline int operator!=(const Real&, const Real&);
55 friend inline int operator<=(const Real&, const Real&);
56 friend inline int operator>=(const Real&, const Real&);
57 friend inline int operator< (const Real&, const Real&);
58 friend inline int operator> (const Real&, const Real&);
59
60 friend inline int operator==(const Real&, double d);
61 friend inline int operator!=(const Real&, double d);
62 friend inline int operator<=(const Real&, double d);
63 friend inline int operator>=(const Real&, double d);
64 friend inline int operator< (const Real&, double d);
65 friend inline int operator> (const Real&, double d);
66
67 inline int operator!() const { return (d)?0:1; }
68 inline Real operator+() const { return *this; }
69 inline Real operator-() const { return Real(-d); }
70
71 private:
72 // Real( long ) {}
73 // Real( int ) {}
74
75 #if (REAL_IS_FLOAT)
76 float d;
77 #else
78 double d;
79 #endif
80 };
81
82 //--------------------------------------------------------------------------
83
84 inline const Real& Real::operator=(const Real &z)
85 {
86 d = z.d;
87 return *this;
88 }
89
90 inline const Real& Real::operator+=(const Real &z)
91 {
92 d += z.d;
93 return *this;
94 }
95 inline const Real& Real::operator-=(const Real &z)
96 {
97 d -= z.d;
98 return *this;
99 }
100 inline const Real& Real::operator*=(const Real &z)
101 {
102 d *= z.d;
103 return *this;
104 }
105 inline const Real& Real::operator/=(const Real &z)
106 {
107 d /= z.d;
108 return *this;
109 }
110
111 //--------------------------------------------------------------------------
112
113 inline int operator==(const Real& z1, const Real& z2)
114 { return z1.d == z2.d; }
115 inline int operator!=(const Real& z1, const Real& z2)
116 { return z1.d != z2.d; }
117 inline int operator<(const Real& z1, const Real& z2)
118 { return z1.d < z2.d; }
119 inline int operator>(const Real& z1, const Real& z2)
120 { return z1.d > z2.d; }
121 inline int operator<=(const Real& z1, const Real& z2)
122 { return z1.d <= z2.d; }
123 inline int operator>=(const Real& z1, const Real& z2)
124 { return z1.d >= z2.d; }
125
126 inline int operator==(const Real& z1, double d)
127 { return z1.d == d; }
128 inline int operator!=(const Real& z1, double d)
129 { return z1.d != d; }
130 inline int operator<(const Real& z1, double d)
131 { return z1.d < d; }
132 inline int operator>(const Real& z1, double d)
133 { return z1.d > d; }
134 inline int operator<=(const Real& z1, double d)
135 { return z1.d <= d; }
136 inline int operator>=(const Real& z1, double d)
137 { return z1.d >= d; }
138
139 //--------------------------------------------------------------------------
140 inline Real Real::operator+( const Real &z ) const { Real erg(*this); erg+=z; return erg; }
141 inline const Real& Real::operator+=(double d) { return *this+=Real(d); }
142 inline Real operator+( double d, const Real &z2 ) { return Real(d)+z2; }
143 inline Real operator+( const Real &z1, double d ) { return z1+Real(d); }
144
145 inline Real Real::operator-( const Real &z ) const { Real erg(*this); erg-=z; return erg; }
146 inline const Real& Real::operator-=(double d) { return *this-=Real(d); }
147 inline Real operator-( double d, const Real &z2 ) { return Real(d)-z2; }
148 inline Real operator-( const Real &z1, double d ) { return z1-Real(d); }
149
150 inline Real Real::operator*( const Real &z ) const { Real erg(*this); erg*=z; return erg; }
151 inline const Real& Real::operator*=(double d) { return *this*=Real(d); }
152 inline Real operator*( double d, const Real &z2 ) { return Real(d)*z2; }
153 inline Real operator*( const Real &z1, double d ) { return z1*Real(d); }
154
155 inline Real Real::operator/( const Real &z ) const { Real erg(*this); erg/=z; return erg; }
156 inline const Real& Real::operator/=(double d) { return *this/=Real(d); }
157 inline Real operator/( double d, const Real &z2 ) { return Real(d)/z2; }
158 inline Real operator/( const Real &z1, double d ) { return z1/Real(d); }
159 //--------------------------------------------------------------------------
160
161
162
163 #endif
164
165 #ifndef RealZero
166 extern const Real RealZero; // Null als Konstante der Klasse
167 #endif
168
169
170 class FunTab {
171 public:
172 FunTab( double (*fkt)(double), double from=0.0, double to=360.0, int step=360 );
173 ~FunTab();
174
175 const Real &GetVal( const Real &in ) const;
176 Real GetRezVal( const Real &in ) const;
177
178 private:
179 Real *val;
180
181 Real from;
182 Real to;
183 int step;
184 Real interval;
185 };
186
187 extern "C" {
188 double floor( double x ); // aus math.h
189 }
rtoi(const Real & r)190 inline int rtoi(const Real &r) { return (int)floor((double)r+0.5); }
191
192 #endif
193