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