79
|
1 #include "stdio.h"
|
|
2
|
|
3 void test1();
|
82
|
4 void print(double d);
|
79
|
5
|
81
|
6 extern double sin(double);
|
84
|
7 // extern float fsin(float);
|
94
|
8 double test2(double f,int i);
|
81
|
9
|
82
|
10 float f = 0.3;
|
|
11 double d = 0.3;
|
|
12 float f1 = 0.3;
|
|
13 double d1 = 0.3;
|
84
|
14 double d2 = -0.2;
|
96
|
15 float h = 1.0;
|
82
|
16
|
91
|
17 int
|
|
18 d2i(double d) {
|
|
19 return (int)d;
|
|
20 }
|
|
21
|
|
22 double
|
|
23 i2d(int u) {
|
|
24 return (double)u;
|
|
25 }
|
90
|
26
|
91
|
27 unsigned u;
|
|
28 unsigned
|
|
29 d2u(double d) {
|
|
30 return (unsigned)d;
|
|
31 }
|
|
32
|
|
33 double
|
|
34 u2d(unsigned u) {
|
|
35 return (double)u;
|
90
|
36 }
|
|
37
|
379
|
38 double
|
|
39 f2d(float u) {
|
|
40 double u1;
|
|
41 u1 = f1;
|
|
42 return (double)u;
|
|
43 }
|
|
44
|
|
45 float
|
|
46 d2f(double u) {
|
|
47 float u1;
|
|
48 u1 = d1;
|
|
49 return (float)u;
|
|
50 }
|
|
51
|
79
|
52 int
|
|
53 main(int ac,char *av[]) {
|
82
|
54 double g;
|
|
55 int i;
|
85
|
56 unsigned u;
|
108
|
57 double d00 = ac?0.5:3;
|
|
58
|
|
59 printf("%g\n",d00);
|
82
|
60
|
|
61 g = 1.0;
|
|
62 g = -g;
|
232
|
63 printf("%d\ncond0 ",1);
|
|
64 if(f==f*1.0) printf("t ");
|
|
65 printf("%d\ncond1 ",f==f*1.0);
|
|
66 if(d==f*1.0) printf("t ");
|
|
67 printf("%d\ncond2 ",d==f*1.0);
|
|
68 if(f==f1) printf("t ");
|
|
69 printf("%d\ncond3 ",f==f1);
|
|
70 if(d==d1) printf("t ");
|
|
71 printf("%d\ncond4 ",d==d2);
|
|
72 if(d==d2) printf("t ");
|
|
73 printf("%d\ncond5 ",(d==d2));
|
|
74 if(d>d1) printf("t ");
|
|
75 printf("%d\ncond6 ",d>d1);
|
|
76 if(d>d2) printf("t ");
|
|
77 printf("%d\ncond7 ",d>d2);
|
|
78 if(d>=d1) printf("t ");
|
|
79 printf("%d\ncond8 ",d>=d1);
|
|
80 if(d>=d2) printf("t ");
|
|
81 printf("%d\ncond9 ",d>=d2);
|
|
82 if(d!=d1) printf("t ");
|
|
83 printf("%d\ncond10 ",d!=d1);
|
|
84 if(d!=d2) printf("5 ");
|
|
85 printf("%d\ncond11 ",d!=d2);
|
|
86 if(d<d1) printf("t ");
|
|
87 printf("%d\ncond12 ",d<d1);
|
|
88 if(d<d2) printf("t ");
|
|
89 printf("%d\ncond13 ",d<d2);
|
|
90 if(d<=d1) printf("t ");
|
|
91 printf("%d\ncond14 ",d<=d1);
|
|
92 if(d<=d2) printf("t ");
|
|
93 printf("%d\ncond15 ",d<=d2);
|
85
|
94 d = 123.4234; f=-234.333;
|
82
|
95 i = d;
|
|
96 d = i;
|
|
97 i = f;
|
|
98 f = i;
|
276
|
99 printf("\ni=%d d=%g f=%f",i,d,f);
|
94
|
100 f = g = d = d1 = d2 = f;
|
276
|
101 printf(" i=%d d=%g f=%f g=%g\n",i,d,f,g);
|
82
|
102
|
86
|
103 d = 4204967294.4234; f=4204967294.4234;
|
85
|
104 u = d;
|
284
|
105 printf("1: u=%u d=%g f=%f\n",u,d,f);
|
85
|
106 d = u;
|
284
|
107 printf("2: u=%u d=%g f=%f\n",u,d,f);
|
85
|
108 u = f;
|
284
|
109 printf("3: u=%u d=%g f=%f\n",u,d,f);
|
85
|
110 f = u;
|
284
|
111 printf("4: u=%u d=%g f=%f\n",u,d,f);
|
85
|
112
|
82
|
113 print(1.0);
|
|
114 print(0.1234);
|
|
115 print(1.234e10);
|
|
116 print(1.234e-10);
|
|
117
|
79
|
118 test1();
|
94
|
119 printf("nested call: %g\n",test2(test2(test2(test2(-0.333,3),5),6),7));
|
79
|
120 return 0;
|
|
121 }
|
|
122
|
82
|
123 void
|
|
124 print(double d)
|
|
125 {
|
|
126 float f;
|
|
127 int *dd;
|
|
128
|
|
129 f = d;
|
|
130
|
|
131 dd = (int*) &d;
|
84
|
132 printf("d %g ",d);
|
82
|
133 printf("dx %08x %08x\n",*(dd),*(dd+1));
|
|
134
|
|
135 dd = (int*) &f;
|
84
|
136 printf("f %g ",f);
|
82
|
137 printf("dx %08x \n",*(dd));
|
|
138 }
|
|
139
|
81
|
140 double
|
|
141 testd(double i,double j)
|
|
142 {
|
87
|
143 return j+1.1+.0e3+12.3e-12;
|
81
|
144 }
|
|
145
|
|
146 float
|
|
147 testf(float i,float j)
|
|
148 {
|
87
|
149 return j+1;
|
81
|
150 }
|
|
151
|
79
|
152 void
|
|
153 test1()
|
|
154 {
|
|
155 float f;
|
|
156 float f1;
|
|
157 double g;
|
|
158 double g1;
|
85
|
159 float *pf;
|
|
160 float *pf1;
|
|
161 double *pg;
|
|
162 double *pg1;
|
|
163 int n = 1;
|
79
|
164
|
87
|
165 printf("simple double ");
|
79
|
166 f = 1.3;
|
|
167
|
|
168 g = 1.0;
|
|
169 g = g+g;
|
85
|
170 printf("%d:%g\t",n++,g);
|
79
|
171 g1 = g*g;
|
85
|
172 printf("%d:%g\t",n++,g1);
|
79
|
173 g = g/g1;
|
85
|
174 printf("%d:%g\t",n++,g);
|
79
|
175 g = g-g1;
|
85
|
176 printf("%d:%g\t",n++,g);
|
79
|
177 g = sin(g1);
|
85
|
178 printf("%d:%g\t",n++,g);
|
81
|
179 g = testd(g,g1);
|
85
|
180 printf("%d:%g\t",n++,g);
|
|
181 printf("\n");
|
79
|
182
|
87
|
183 printf("simple float ");
|
79
|
184 f = f+f;
|
85
|
185 printf("%d:%g\t",n++,f);
|
79
|
186 f1 = f*f;
|
85
|
187 printf("%d:%g\t",n++,f1);
|
79
|
188 f = f/f1;
|
85
|
189 printf("%d:%g\t",n++,f);
|
79
|
190 f = f-f1;
|
85
|
191 printf("%d:%g\t",n++,f);
|
79
|
192 f = sin(f1);
|
85
|
193 printf("%d:%g\t",n++,f);
|
|
194 printf("\n");
|
|
195
|
87
|
196 printf("post/pre increment ");
|
86
|
197 g1 = g;
|
87
|
198 printf("%d:%g\t",n++,g1++ - ++g);
|
85
|
199
|
86
|
200 f1 = f;
|
87
|
201 printf("%d:%g\t",n++,f1++ - ++f);
|
|
202
|
|
203 g1 = g;
|
|
204 printf("%d:%g\t",n++,g1-- - --g);
|
|
205
|
|
206 f1 = f;
|
|
207 printf("%d:%g\t",n++,f1-- - --f);
|
|
208
|
|
209 printf("\n");
|
|
210 printf("simple calc ");
|
|
211
|
|
212 f=0.13; g=-0.56; f1=-0.13; g1=0.56;
|
79
|
213
|
|
214 g = f+f;
|
85
|
215 printf("%d:%g\t",n++,g);
|
79
|
216 f = g*g;
|
85
|
217 printf("%d:%g\t",n++,f);
|
79
|
218 g = g*g+f*f-g1*g1;
|
85
|
219 printf("%d:%g\t",n++,g);
|
|
220 printf("\n");
|
79
|
221
|
87
|
222 printf("float argument ");
|
|
223 f = testf(f,f1);
|
|
224 printf("%d:%g\t",n++,f);
|
|
225
|
|
226 printf("\nindirect ");
|
85
|
227 n=1;
|
|
228 f = 1.3; pf=&f; pf1=&f1;
|
|
229
|
|
230 g = 1.0; pg=&g; pg1=&g1;
|
|
231 *pg = *pg+ *pg;
|
|
232 printf("%d:%g\t",n++,*pg);
|
|
233 *pg1 = *pg**pg;
|
|
234 printf("%d:%g\t",n++,*pg1);
|
|
235 *pg = *pg/ *pg1;
|
|
236 printf("%d:%g\t",n++,*pg);
|
|
237 *pg = *pg-*pg1;
|
|
238 printf("%d:%g\t",n++,*pg);
|
|
239 *pg = sin(*pg1);
|
|
240 printf("%d:%g\t",n++,*pg);
|
|
241 *pg = testd(*pg,*pg1);
|
|
242 printf("%d:%g\t",n++,*pg);
|
|
243 printf("\n");
|
|
244
|
|
245 *pf = *pf+*pf;
|
|
246 printf("%d:%g\t",n++,*pf);
|
|
247 *pf1 = *pf**pf;
|
|
248 printf("%d:%g\t",n++,*pf1);
|
|
249 *pf = *pf/ *pf1;
|
|
250 printf("%d:%g\t",n++,*pf);
|
|
251 *pf = *pf-*pf1;
|
|
252 printf("%d:%g\t",n++,*pf);
|
|
253 *pf = sin(*pf1);
|
|
254 printf("%d:%g\t",n++,*pf);
|
|
255 printf("\n");
|
|
256
|
87
|
257 printf("indirect post/pre ");
|
86
|
258 *pg1 = *pg;
|
87
|
259 printf("%d:%g\t",n++,(*pg1)++ - ++(*pg));
|
85
|
260
|
86
|
261 *pf1 = *pf;
|
87
|
262 printf("%d:%g\t",n++,(*pf1)++ - ++(*pf));
|
|
263
|
|
264 *pg1 = *pg;
|
|
265 printf("%d:%g\t",n++, (*pg1)-- - --(*pg));
|
86
|
266
|
87
|
267 *pf1 = *pf;
|
|
268 printf("%d:%g\t",n++, (*pf1)-- - --(*pf));
|
|
269 printf("\n");
|
|
270
|
|
271 *pf=0.13; *pg=-0.56; *pf1=-0.13; *pg1=0.56;
|
85
|
272
|
|
273 *pg = *pf+*pf;
|
|
274 printf("%d:%g\t",n++,*pg);
|
|
275 *pf = *pg**pg;
|
|
276 printf("%d:%g\t",n++,*pf);
|
|
277 *pg = *pg**pg+*pf**pf-*pg1**pg1;
|
|
278 printf("%d:%g\t",n++,*pg);
|
|
279 printf("\n");
|
|
280
|
87
|
281 printf("float argument ");
|
|
282
|
|
283 *pf = testf(*pf,*pf1);
|
|
284 printf("%d:%g\t",n++,*pf);
|
|
285
|
|
286
|
|
287 printf("\nassop ");
|
85
|
288 n=1;
|
|
289 f = 1.3;
|
|
290 g = 1.0;
|
|
291
|
|
292 g *= 2*g;
|
|
293 printf("%d:%g\t",n++,g);
|
|
294 g /= 2*g;
|
|
295 printf("%d:%g\t",n++,g);
|
|
296 g -= 2*g;
|
|
297 printf("%d:%g\t",n++,g);
|
|
298 g += 2*g;
|
|
299 printf("%d:%g\t",n++,g);
|
|
300
|
|
301 f *= 2*g;
|
|
302 printf("%d:%g\t",n++,f);
|
|
303 f /= 2*g;
|
|
304 printf("%d:%g\t",n++,f);
|
|
305 f -= 2*g;
|
|
306 printf("%d:%g\t",n++,f);
|
|
307 f += 2*g;
|
|
308 printf("%d:%g\t",n++,f);
|
|
309 printf("\n");
|
|
310
|
|
311 n=1;
|
|
312 f = 1.3;
|
|
313 g = 1.0;
|
|
314
|
87
|
315 printf("indirect assop ");
|
85
|
316 *pg *= 2**pg;
|
|
317 printf("%d:%g\t",n++,*pg);
|
|
318 *pg /= 2**pg;
|
|
319 printf("%d:%g\t",n++,*pg);
|
|
320 *pg -= 2**pg;
|
|
321 printf("%d:%g\t",n++,*pg);
|
|
322 *pg += 2**pg;
|
|
323 printf("%d:%g\t",n++,*pg);
|
|
324
|
|
325 *pf *= 2**pg;
|
|
326 printf("%d:%g\t",n++,*pf);
|
|
327 *pf /= 2**pg;
|
|
328 printf("%d:%g\t",n++,*pf);
|
|
329 *pf -= 2**pg;
|
|
330 printf("%d:%g\t",n++,*pf);
|
|
331 *pf += 2**pg;
|
|
332 printf("%d:%g\t",n++,*pf);
|
|
333 printf("\n");
|
|
334
|
|
335
|
79
|
336 return;
|
|
337 }
|
94
|
338
|
|
339 double
|
|
340 test2(double f,int i)
|
|
341 {
|
|
342 double g,h;
|
|
343
|
|
344 if (i<=0) return f;
|
112
|
345 #if 1
|
|
346 printf("rec: %d %g\n",i,f);
|
|
347 #endif
|
94
|
348 g = f*2;
|
|
349 h = f-0.5;
|
|
350 return h/3-(3.0-(g+3)*test2(f*0.5,i-1)/(h-1));
|
|
351 }
|