ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/ot_doubleprecision.cpp
Revision: 17
Committed: Fri Jun 15 21:55:53 2007 UTC (17 years, 11 months ago) by francois
Original Path: magic/lib/outil/outil/src/ot_doubleprecision.cpp
File size: 4713 byte(s)
Log Message:
ajout de routine de calcul de tenseur et ajout de la double precision

File Contents

# User Rev Content
1 francois 17 #include "gestionversion.h"
2     //---------------------------------------------------------------------------
3     #pragma hdrstop
4    
5     #include <math.h>
6     #include <iomanip.h>
7     #include "ot_doubleprecision.h"
8     #include <iostreamh>
9    
10     //---------------------------------------------------------------------------
11    
12    
13     #pragma package(smart_init)
14    
15     double2::double2():x(0.),dx(1e-12)
16     {
17     }
18     double2::double2(double val):x(val),dx(1e-12*fabs(val))
19     {
20     }
21     double2::double2(double2 &mdd):x(mdd.x),dx(mdd.dx)
22     {
23     }
24     double2::double2(const double2& mdd):x(mdd.x),dx(mdd.dx)
25     {
26     }
27     double2::~double2()
28     {
29     }
30    
31    
32     double2& double2::operator=(const double2& val)
33     {
34     x=val.x;
35     dx=val.dx;
36     return *this;
37     }
38    
39     int double2::operator==(double2& val)
40     {
41     int rep=0;
42     if ((val.x>=x-dx/2.) && (val.x<=x+dx/2.) )
43     if ((x>=val.x-val.dx/2.) && (x<=val.x+val.dx/2.) )
44     rep=1; else rep=0;
45     return rep;
46     }
47    
48     int double2::operator<(double2& val)
49     {
50     if (x+dx/2.<val.x-val.dx/2.)
51     return 1;
52     else
53     return 0;
54     }
55    
56     int double2::operator<=(double2& val)
57     {
58     if (x+dx/2.<val.x+val.dx/2.)
59     return 1;
60     else
61     return 0;
62     }
63    
64     int double2::operator>(double2& val)
65     {
66     double a=x-dx/2.;
67     double b=val.x+val.dx/2.;
68     if (a>b)
69     return 1;
70     else
71     return 0;
72     }
73    
74     int double2::operator>=(double2& val)
75     {
76     if (x-dx/2.>val.x-val.dx/2.)
77     return 1; else return 0;
78     }
79    
80     double2 operator+(double2& val1,double2& val2)
81     {
82     double2 xx;
83     xx.x=val1.x+val2.x;
84     xx.dx=val1.dx+val2.dx;
85     return xx;
86     }
87    
88     double2 operator+(const double2& val1,const double2& val2)
89     {
90     double2 xx;
91     xx.x=val1.x+val2.x;
92     xx.dx=val1.dx+val2.dx;
93     return xx;
94     }
95    
96    
97     double2 operator-(double2& val1,double2& val2)
98     {
99     double2 xx;
100     xx.x=val1.x-val2.x;
101     xx.dx=val1.dx+val2.dx;
102     return xx;
103     }
104    
105     double2 operator-(const double2& val1,const double2& val2)
106     {
107     double2 xx;
108     xx.x=val1.x-val2.x;
109     xx.dx=val1.dx+val2.dx;
110     return xx;
111     }
112    
113    
114     double2 operator*(double2& val1,double2& val2)
115     {
116     double2 xx;
117     xx.x=val1.x*val2.x;
118     xx.dx=fabs(val1.x)*val2.dx+fabs(val2.x)*val1.dx;
119     return xx;
120     }
121    
122     double2 operator*(const double2& val1,const double2& val2)
123     {
124     double2 xx;
125     xx.x=val1.x*val2.x;
126     xx.dx=fabs(val1.x)*val2.dx+fabs(val2.x)*val1.dx;
127     return xx;
128     }
129    
130    
131     double2 operator/(double2& val1,double2& val2)
132     {
133     double2 xx;
134     xx.x=val1.x/val2.x;
135     xx.dx=fabs(1./val2.x)*val1.dx+fabs(val1.x/val2.x/val2.x)*val2.dx;
136     return xx;
137     }
138    
139     double2 operator/(const double2& val1,const double2& val2)
140     {
141     double2 xx;
142     xx.x=val1.x/val2.x;
143     xx.dx=fabs(1./val2.x)*val1.dx+fabs(val1.x/val2.x/val2.x)*val2.dx;
144     return xx;
145     }
146    
147    
148     double2 operator^(double2& val1,double n=0.5)
149     {
150     double2 xx;
151     xx.x=pow(val1.x,n);
152     if(val1.x)
153     xx.dx=n*pow(val1.x,n-1)*val1.dx;
154     else xx.dx=val1.dx;
155     return xx;
156     }
157    
158     double2 operator^(const double2& val1,const double n=0.5)
159     {
160     double2 xx;
161     xx.x=pow(val1.x,n);
162     if(val1.x)
163     xx.dx=n*pow(val1.x,n-1)*val1.dx;
164     else xx.dx=val1.dx;
165     return xx;
166     }
167    
168     std::ostream& operator <<(std::ostream& os,const double2& m)
169     {
170     os<<m.x<<setw(15)<<m.dx;
171     return os;
172     }
173    
174     double2 cos(double2& val)
175     {
176     double2 xx;
177     xx.x=cos(val.x);
178     xx.dx=fabs(sin(val.x))*val.dx;
179     return xx;
180     }
181    
182    
183     double2 cos(const double2& val)
184     {
185     double2 xx;
186     xx.x=cos(val.x);
187     xx.dx=fabs(sin(val.x))*val.dx;
188     return xx;
189     }
190    
191    
192     double2 acos(double2& val)
193     {
194     double2 xx;
195     xx.x=acos(val.x);
196     xx.dx=fabs(-1./sqrt(1-val.x*val.x))*val.dx;
197     return xx;
198     }
199    
200     double2 acos(const double2& val)
201     {
202     double2 xx;
203     xx.x=acos(val.x);
204     xx.dx=fabs(-1./sqrt(1-val.x*val.x))*val.dx;
205     return xx;
206     }
207    
208    
209     double2 sin(double2& val)
210     {
211     double2 xx;
212     xx.x=sin(val.x);
213     xx.dx=fabs(cos(val.x))*val.dx;
214     return xx;
215     }
216    
217    
218     double2 fabs(double2& val)
219     {
220     double2 xx;
221     if (val.x<0.0)
222     {
223     xx.x=-val.x;
224     xx.dx=val.dx;
225     }
226     else xx=val;
227     return xx;
228     }
229    
230    
231    
232    
233     double2 sin(const double2& val)
234     {
235     double2 xx;
236     xx.x=sin(val.x);
237     xx.dx=fabs(cos(val.x))*val.dx;
238     return xx;
239     }
240    
241    
242    
243    
244     double2 asin(double2& val)
245     {
246     double2 xx;
247     xx.x=asin(val.x);
248     xx.dx=fabs(1./sqrt(1-val.x*val.x))*val.dx;
249     return xx;
250     }
251    
252    
253     double2 asin(const double2& val)
254     {
255     double2 xx;
256     xx.x=asin(val.x);
257     xx.dx=fabs(1./sqrt(1-val.x*val.x))*val.dx;
258     return xx;
259     }
260    
261     double2 tan(double2& val)
262     {
263     double2 xx;
264     xx.x=tan(val.x);
265     xx.dx=fabs(1+tan(val.x)*tan(val.x))*val.dx;
266     return xx;
267     }
268    
269     double2 tan(const double2& val)
270     {
271     double2 xx;
272     xx.x=tan(val.x);
273     xx.dx=fabs(1+tan(val.x)*tan(val.x))*val.dx;
274     return xx;
275     }
276    
277     double2 atan(double2& val)
278     {
279     double2 xx;
280     xx.x=atan(val.x);
281     xx.dx=fabs(1./(1+val.x*val.x))*val.dx;
282     return xx;
283     }
284    
285    
286     double2 atan(const double2& val)
287     {
288     double2 xx;
289     xx.x=atan(val.x);
290     xx.dx=fabs(1./(1+val.x*val.x))*val.dx;
291     return xx;
292     }
293    
294    
295    
296     double double2::get_x()
297     {
298     return x;
299     }
300    
301    
302     double double2::get_dx()
303     {
304     return dx;
305     }
306    
307    
308    
309    
310    
311    
312    
313