Sacado Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
tradoptest_06.cpp
Go to the documentation of this file.
1 
2 
3 /* Try to test all combinations of types and operations */
4 
5 
6 
7 #define ADT_RAD Sacado::Rad::
8 
9 
10 
11 #include "Sacado_trad.hpp"
12 
13 #include <cstdio>
14 
15 using std::printf;
16 
17 
18 
19 typedef ADT_RAD IndepADvar<double> AI;
20 
21 typedef ADT_RAD ADvar<double> A;
22 
23 typedef ADT_RAD ConstADvar<double> C;
24 
25 typedef ADT_RAD ADvari<double> Ai;
26 
27 typedef const ADT_RAD IndepADvar<double> cAI;
28 
29 typedef const ADT_RAD ADvar<double> cA;
30 
31 typedef const ADT_RAD ConstADvar<double> cC;
32 
33 typedef const ADT_RAD ADvari<double> cAi;
34 
35 static int rc;
36 
37 
38 
39 /* This is to be run through an awk program that changes lines */
40 
41 /* with "BINTEST" or "UNOPTEST" at the beginning of the line into */
42 
43 /* a the desired C++ (which we can then inspect). */
44 
45 
46 
47  void
48 
49 botch(const char *what, double wanted, double got)
50 
51 {
52 
53  printf("%s: expected %g, got %g, diff = %.2g\n", what, wanted, got, wanted-got);
54 
55  rc = 1;
56 
57  }
58 
59 
60 
61  const double tol = 5e-16;
62 
63 
64 
65  int
66 
67 differ(double a, double b)
68 
69 {
70 
71  double d = a - b;
72 
73  if (d < 0.)
74 
75  d = -d;
76 
77  if (a < 0.)
78 
79  a = -a;
80 
81  if (b < 0.)
82 
83  b = -b;
84 
85  if (a < b)
86 
87  a = b;
88 
89  if (a > 0.)
90 
91  d /= a;
92 
93  return d > tol;
94 
95  }
96 
97 
98 
99 #ifndef RAD_EQ_ALIAS
100 
101 #define Plus_dx 1.
102 
103 #else
104 
105 #ifdef RAD_AUTO_AD_Const
106 
107 #define Plus_dx 1.
108 
109 #else
110 
111 #define Plus_dx 0.
112 
113 #endif
114 
115 #endif
116 
117 
118 
119  int
120 
121 main(void)
122 
123 {
124 
125  AI xAI, yAI;
126 
127  A fA, xA, yA;
128 
129  C xC, yC;
130 
131  double dx, dy, f, xd, yd;
132 
133  long xL, yL;
134 
135  int xi, yi;
136 
137 
138 
139  rc = 0;
140 
141 
142  /**** Test of pow ****/
143 
144  xd = 2.; yd = 3.; f = 8.; dx = 12.; dy = 8.*log(2.);
145  xAI = xd;
146  yAI = yd;
147  fA = pow(xAI,yAI);
148  A::Gradcomp();
149  if (differ(fA.val(), f)) botch("fA = pow(xAI,yAI)", f, fA.val());
150  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,yAI)/dx", dx, xAI.adj());
151  else if (differ(yAI.adj(), dy)) botch("d pow(xAI,yAI)/dy", dy, yAI.adj());
152  {
153  A::aval_reset();
154  cAI xcAI(xd);
155  yAI = yd;
156  fA = pow(xcAI,yAI);
157  A::Gradcomp();
158  if (differ(fA.val(), f)) botch("fA = pow(xcAI,yAI)", f, fA.val());
159  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,yAI)/dx", dx, xcAI.adj());
160  else if (differ(yAI.adj(), dy)) botch("d pow(xcAI,yAI)/dy", dy, yAI.adj());
161  }
162  {
163  A::aval_reset();
164  xAI = xd;
165  cAI ycAI(yd);
166  fA = pow(xAI,ycAI);
167  A::Gradcomp();
168  if (differ(fA.val(), f)) botch("fA = pow(xAI,ycAI)", f, fA.val());
169  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,ycAI)/dx", dx, xAI.adj());
170  else if (differ(ycAI.adj(), dy)) botch("d pow(xAI,ycAI)/dy", dy, ycAI.adj());
171  }
172  {
173  A::aval_reset();
174  cAI xcAI(xd);
175  cAI ycAI(yd);
176  fA = pow(xcAI,ycAI);
177  A::Gradcomp();
178  if (differ(fA.val(), f)) botch("fA = pow(xcAI,ycAI)", f, fA.val());
179  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,ycAI)/dx", dx, xcAI.adj());
180  else if (differ(ycAI.adj(), dy)) botch("d pow(xcAI,ycAI)/dy", dy, ycAI.adj());
181  }
182  xAI = xd;
183  yA = yd;
184  fA = pow(xAI,yA);
185  A::Gradcomp();
186  if (differ(fA.val(), f)) botch("fA = pow(xAI,yA)", f, fA.val());
187  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,yA)/dx", dx, xAI.adj());
188  else if (differ(yA.adj(), dy)) botch("d pow(xAI,yA)/dy", dy, yA.adj());
189  {
190  A::aval_reset();
191  cAI xcAI(xd);
192  yA = yd;
193  fA = pow(xcAI,yA);
194  A::Gradcomp();
195  if (differ(fA.val(), f)) botch("fA = pow(xcAI,yA)", f, fA.val());
196  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,yA)/dx", dx, xcAI.adj());
197  else if (differ(yA.adj(), dy)) botch("d pow(xcAI,yA)/dy", dy, yA.adj());
198  }
199  {
200  A::aval_reset();
201  xAI = xd;
202  cA ycA(yd);
203  fA = pow(xAI,ycA);
204  A::Gradcomp();
205  if (differ(fA.val(), f)) botch("fA = pow(xAI,ycA)", f, fA.val());
206  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,ycA)/dx", dx, xAI.adj());
207  else if (differ(ycA.adj(), dy)) botch("d pow(xAI,ycA)/dy", dy, ycA.adj());
208  }
209  {
210  A::aval_reset();
211  cAI xcAI(xd);
212  cA ycA(yd);
213  fA = pow(xcAI,ycA);
214  A::Gradcomp();
215  if (differ(fA.val(), f)) botch("fA = pow(xcAI,ycA)", f, fA.val());
216  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,ycA)/dx", dx, xcAI.adj());
217  else if (differ(ycA.adj(), dy)) botch("d pow(xcAI,ycA)/dy", dy, ycA.adj());
218  }
219  xAI = xd;
220  yC = yd;
221  fA = pow(xAI,yC);
222  A::Gradcomp();
223  if (differ(fA.val(), f)) botch("fA = pow(xAI,yC)", f, fA.val());
224  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,yC)/dx", dx, xAI.adj());
225  else if (differ(yC.adj(), dy)) botch("d pow(xAI,yC)/dy", dy, yC.adj());
226  {
227  A::aval_reset();
228  cAI xcAI(xd);
229  yC = yd;
230  fA = pow(xcAI,yC);
231  A::Gradcomp();
232  if (differ(fA.val(), f)) botch("fA = pow(xcAI,yC)", f, fA.val());
233  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,yC)/dx", dx, xcAI.adj());
234  else if (differ(yC.adj(), dy)) botch("d pow(xcAI,yC)/dy", dy, yC.adj());
235  }
236  {
237  A::aval_reset();
238  xAI = xd;
239  cC ycC(yd);
240  fA = pow(xAI,ycC);
241  A::Gradcomp();
242  if (differ(fA.val(), f)) botch("fA = pow(xAI,ycC)", f, fA.val());
243  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,ycC)/dx", dx, xAI.adj());
244  else if (differ(ycC.adj(), dy)) botch("d pow(xAI,ycC)/dy", dy, ycC.adj());
245  }
246  {
247  A::aval_reset();
248  cAI xcAI(xd);
249  cC ycC(yd);
250  fA = pow(xcAI,ycC);
251  A::Gradcomp();
252  if (differ(fA.val(), f)) botch("fA = pow(xcAI,ycC)", f, fA.val());
253  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,ycC)/dx", dx, xcAI.adj());
254  else if (differ(ycC.adj(), dy)) botch("d pow(xcAI,ycC)/dy", dy, ycC.adj());
255  }
256  {
257  xAI = xd;
258  Ai yAi(yd);
259  fA = pow(xAI,yAi);
260  A::Gradcomp();
261  if (differ(fA.val(), f)) botch("fA = pow(xAI,yAi)", f, fA.val());
262  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,yAi)/dx", dx, xAI.adj());
263  else if (differ(yAi.aval, dy)) botch("d pow(xAI,yAi)/dy", dy, yAi.aval);
264  }
265  {
266  A::aval_reset();
267  cAI xcAI(xd);
268  Ai yAi(yd);
269  fA = pow(xcAI,yAi);
270  A::Gradcomp();
271  if (differ(fA.val(), f)) botch("fA = pow(xcAI,yAi)", f, fA.val());
272  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,yAi)/dx", dx, xcAI.adj());
273  else if (differ(yAi.aval, dy)) botch("d pow(xcAI,yAi)/dy", dy, yAi.aval);
274  }
275  {
276  A::aval_reset();
277  xAI = xd;
278  cAi ycAi(yd);
279  fA = pow(xAI,ycAi);
280  A::Gradcomp();
281  if (differ(fA.val(), f)) botch("fA = pow(xAI,ycAi)", f, fA.val());
282  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,ycAi)/dx", dx, xAI.adj());
283  else if (differ(ycAi.aval, dy)) botch("d pow(xAI,ycAi)/dy", dy, ycAi.aval);
284  }
285  {
286  A::aval_reset();
287  cAI xcAI(xd);
288  cAi ycAi(yd);
289  fA = pow(xcAI,ycAi);
290  A::Gradcomp();
291  if (differ(fA.val(), f)) botch("fA = pow(xcAI,ycAi)", f, fA.val());
292  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,ycAi)/dx", dx, xcAI.adj());
293  else if (differ(ycAi.aval, dy)) botch("d pow(xcAI,ycAi)/dy", dy, ycAi.aval);
294  }
295  xAI = xd;
296  fA = pow(xAI,yd);
297  A::Gradcomp();
298  if (differ(fA.val(), f)) botch("fA = pow(xAI,yd)", f, fA.val());
299  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,yd)/dx", dx, xAI.adj());
300  {
301  A::aval_reset();
302  cAI xcAI(xd);
303  fA = pow(xcAI,yd);
304  A::Gradcomp();
305  if (differ(fA.val(), f)) botch("fA = pow(xcAI,yd)", f, fA.val());
306  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,yd)/dx", dx, xcAI.adj());
307  }
308  xAI = xd;
309  yL = (long)yd;
310  fA = pow(xAI,yL);
311  A::Gradcomp();
312  if (differ(fA.val(), f)) botch("fA = pow(xAI,yL)", f, fA.val());
313  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,yL)/dx", dx, xAI.adj());
314  {
315  A::aval_reset();
316  cAI xcAI(xd);
317  yL = (long)yd;
318  fA = pow(xcAI,yL);
319  A::Gradcomp();
320  if (differ(fA.val(), f)) botch("fA = pow(xcAI,yL)", f, fA.val());
321  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,yL)/dx", dx, xcAI.adj());
322  }
323  xAI = xd;
324  yi = (int)yd;
325  fA = pow(xAI,yi);
326  A::Gradcomp();
327  if (differ(fA.val(), f)) botch("fA = pow(xAI,yi)", f, fA.val());
328  else if (differ(xAI.adj(), dx)) botch("d pow(xAI,yi)/dx", dx, xAI.adj());
329  {
330  A::aval_reset();
331  cAI xcAI(xd);
332  yi = (int)yd;
333  fA = pow(xcAI,yi);
334  A::Gradcomp();
335  if (differ(fA.val(), f)) botch("fA = pow(xcAI,yi)", f, fA.val());
336  else if (differ(xcAI.adj(), dx)) botch("d pow(xcAI,yi)/dx", dx, xcAI.adj());
337  }
338  xA = xd;
339  yAI = yd;
340  fA = pow(xA,yAI);
341  A::Gradcomp();
342  if (differ(fA.val(), f)) botch("fA = pow(xA,yAI)", f, fA.val());
343  else if (differ(xA.adj(), dx)) botch("d pow(xA,yAI)/dx", dx, xA.adj());
344  else if (differ(yAI.adj(), dy)) botch("d pow(xA,yAI)/dy", dy, yAI.adj());
345  {
346  A::aval_reset();
347  cA xcA(xd);
348  yAI = yd;
349  fA = pow(xcA,yAI);
350  A::Gradcomp();
351  if (differ(fA.val(), f)) botch("fA = pow(xcA,yAI)", f, fA.val());
352  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,yAI)/dx", dx, xcA.adj());
353  else if (differ(yAI.adj(), dy)) botch("d pow(xcA,yAI)/dy", dy, yAI.adj());
354  }
355  {
356  A::aval_reset();
357  xA = xd;
358  cAI ycAI(yd);
359  fA = pow(xA,ycAI);
360  A::Gradcomp();
361  if (differ(fA.val(), f)) botch("fA = pow(xA,ycAI)", f, fA.val());
362  else if (differ(xA.adj(), dx)) botch("d pow(xA,ycAI)/dx", dx, xA.adj());
363  else if (differ(ycAI.adj(), dy)) botch("d pow(xA,ycAI)/dy", dy, ycAI.adj());
364  }
365  {
366  A::aval_reset();
367  cA xcA(xd);
368  cAI ycAI(yd);
369  fA = pow(xcA,ycAI);
370  A::Gradcomp();
371  if (differ(fA.val(), f)) botch("fA = pow(xcA,ycAI)", f, fA.val());
372  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,ycAI)/dx", dx, xcA.adj());
373  else if (differ(ycAI.adj(), dy)) botch("d pow(xcA,ycAI)/dy", dy, ycAI.adj());
374  }
375  xA = xd;
376  yA = yd;
377  fA = pow(xA,yA);
378  A::Gradcomp();
379  if (differ(fA.val(), f)) botch("fA = pow(xA,yA)", f, fA.val());
380  else if (differ(xA.adj(), dx)) botch("d pow(xA,yA)/dx", dx, xA.adj());
381  else if (differ(yA.adj(), dy)) botch("d pow(xA,yA)/dy", dy, yA.adj());
382  {
383  A::aval_reset();
384  cA xcA(xd);
385  yA = yd;
386  fA = pow(xcA,yA);
387  A::Gradcomp();
388  if (differ(fA.val(), f)) botch("fA = pow(xcA,yA)", f, fA.val());
389  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,yA)/dx", dx, xcA.adj());
390  else if (differ(yA.adj(), dy)) botch("d pow(xcA,yA)/dy", dy, yA.adj());
391  }
392  {
393  A::aval_reset();
394  xA = xd;
395  cA ycA(yd);
396  fA = pow(xA,ycA);
397  A::Gradcomp();
398  if (differ(fA.val(), f)) botch("fA = pow(xA,ycA)", f, fA.val());
399  else if (differ(xA.adj(), dx)) botch("d pow(xA,ycA)/dx", dx, xA.adj());
400  else if (differ(ycA.adj(), dy)) botch("d pow(xA,ycA)/dy", dy, ycA.adj());
401  }
402  {
403  A::aval_reset();
404  cA xcA(xd);
405  cA ycA(yd);
406  fA = pow(xcA,ycA);
407  A::Gradcomp();
408  if (differ(fA.val(), f)) botch("fA = pow(xcA,ycA)", f, fA.val());
409  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,ycA)/dx", dx, xcA.adj());
410  else if (differ(ycA.adj(), dy)) botch("d pow(xcA,ycA)/dy", dy, ycA.adj());
411  }
412  xA = xd;
413  yC = yd;
414  fA = pow(xA,yC);
415  A::Gradcomp();
416  if (differ(fA.val(), f)) botch("fA = pow(xA,yC)", f, fA.val());
417  else if (differ(xA.adj(), dx)) botch("d pow(xA,yC)/dx", dx, xA.adj());
418  else if (differ(yC.adj(), dy)) botch("d pow(xA,yC)/dy", dy, yC.adj());
419  {
420  A::aval_reset();
421  cA xcA(xd);
422  yC = yd;
423  fA = pow(xcA,yC);
424  A::Gradcomp();
425  if (differ(fA.val(), f)) botch("fA = pow(xcA,yC)", f, fA.val());
426  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,yC)/dx", dx, xcA.adj());
427  else if (differ(yC.adj(), dy)) botch("d pow(xcA,yC)/dy", dy, yC.adj());
428  }
429  {
430  A::aval_reset();
431  xA = xd;
432  cC ycC(yd);
433  fA = pow(xA,ycC);
434  A::Gradcomp();
435  if (differ(fA.val(), f)) botch("fA = pow(xA,ycC)", f, fA.val());
436  else if (differ(xA.adj(), dx)) botch("d pow(xA,ycC)/dx", dx, xA.adj());
437  else if (differ(ycC.adj(), dy)) botch("d pow(xA,ycC)/dy", dy, ycC.adj());
438  }
439  {
440  A::aval_reset();
441  cA xcA(xd);
442  cC ycC(yd);
443  fA = pow(xcA,ycC);
444  A::Gradcomp();
445  if (differ(fA.val(), f)) botch("fA = pow(xcA,ycC)", f, fA.val());
446  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,ycC)/dx", dx, xcA.adj());
447  else if (differ(ycC.adj(), dy)) botch("d pow(xcA,ycC)/dy", dy, ycC.adj());
448  }
449  {
450  xA = xd;
451  Ai yAi(yd);
452  fA = pow(xA,yAi);
453  A::Gradcomp();
454  if (differ(fA.val(), f)) botch("fA = pow(xA,yAi)", f, fA.val());
455  else if (differ(xA.adj(), dx)) botch("d pow(xA,yAi)/dx", dx, xA.adj());
456  else if (differ(yAi.aval, dy)) botch("d pow(xA,yAi)/dy", dy, yAi.aval);
457  }
458  {
459  A::aval_reset();
460  cA xcA(xd);
461  Ai yAi(yd);
462  fA = pow(xcA,yAi);
463  A::Gradcomp();
464  if (differ(fA.val(), f)) botch("fA = pow(xcA,yAi)", f, fA.val());
465  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,yAi)/dx", dx, xcA.adj());
466  else if (differ(yAi.aval, dy)) botch("d pow(xcA,yAi)/dy", dy, yAi.aval);
467  }
468  {
469  A::aval_reset();
470  xA = xd;
471  cAi ycAi(yd);
472  fA = pow(xA,ycAi);
473  A::Gradcomp();
474  if (differ(fA.val(), f)) botch("fA = pow(xA,ycAi)", f, fA.val());
475  else if (differ(xA.adj(), dx)) botch("d pow(xA,ycAi)/dx", dx, xA.adj());
476  else if (differ(ycAi.aval, dy)) botch("d pow(xA,ycAi)/dy", dy, ycAi.aval);
477  }
478  {
479  A::aval_reset();
480  cA xcA(xd);
481  cAi ycAi(yd);
482  fA = pow(xcA,ycAi);
483  A::Gradcomp();
484  if (differ(fA.val(), f)) botch("fA = pow(xcA,ycAi)", f, fA.val());
485  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,ycAi)/dx", dx, xcA.adj());
486  else if (differ(ycAi.aval, dy)) botch("d pow(xcA,ycAi)/dy", dy, ycAi.aval);
487  }
488  xA = xd;
489  fA = pow(xA,yd);
490  A::Gradcomp();
491  if (differ(fA.val(), f)) botch("fA = pow(xA,yd)", f, fA.val());
492  else if (differ(xA.adj(), dx)) botch("d pow(xA,yd)/dx", dx, xA.adj());
493  {
494  A::aval_reset();
495  cA xcA(xd);
496  fA = pow(xcA,yd);
497  A::Gradcomp();
498  if (differ(fA.val(), f)) botch("fA = pow(xcA,yd)", f, fA.val());
499  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,yd)/dx", dx, xcA.adj());
500  }
501  xA = xd;
502  yL = (long)yd;
503  fA = pow(xA,yL);
504  A::Gradcomp();
505  if (differ(fA.val(), f)) botch("fA = pow(xA,yL)", f, fA.val());
506  else if (differ(xA.adj(), dx)) botch("d pow(xA,yL)/dx", dx, xA.adj());
507  {
508  A::aval_reset();
509  cA xcA(xd);
510  yL = (long)yd;
511  fA = pow(xcA,yL);
512  A::Gradcomp();
513  if (differ(fA.val(), f)) botch("fA = pow(xcA,yL)", f, fA.val());
514  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,yL)/dx", dx, xcA.adj());
515  }
516  xA = xd;
517  yi = (int)yd;
518  fA = pow(xA,yi);
519  A::Gradcomp();
520  if (differ(fA.val(), f)) botch("fA = pow(xA,yi)", f, fA.val());
521  else if (differ(xA.adj(), dx)) botch("d pow(xA,yi)/dx", dx, xA.adj());
522  {
523  A::aval_reset();
524  cA xcA(xd);
525  yi = (int)yd;
526  fA = pow(xcA,yi);
527  A::Gradcomp();
528  if (differ(fA.val(), f)) botch("fA = pow(xcA,yi)", f, fA.val());
529  else if (differ(xcA.adj(), dx)) botch("d pow(xcA,yi)/dx", dx, xcA.adj());
530  }
531  xC = xd;
532  yAI = yd;
533  fA = pow(xC,yAI);
534  A::Gradcomp();
535  if (differ(fA.val(), f)) botch("fA = pow(xC,yAI)", f, fA.val());
536  else if (differ(xC.adj(), dx)) botch("d pow(xC,yAI)/dx", dx, xC.adj());
537  else if (differ(yAI.adj(), dy)) botch("d pow(xC,yAI)/dy", dy, yAI.adj());
538  {
539  A::aval_reset();
540  cC xcC(xd);
541  yAI = yd;
542  fA = pow(xcC,yAI);
543  A::Gradcomp();
544  if (differ(fA.val(), f)) botch("fA = pow(xcC,yAI)", f, fA.val());
545  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,yAI)/dx", dx, xcC.adj());
546  else if (differ(yAI.adj(), dy)) botch("d pow(xcC,yAI)/dy", dy, yAI.adj());
547  }
548  {
549  A::aval_reset();
550  xC = xd;
551  cAI ycAI(yd);
552  fA = pow(xC,ycAI);
553  A::Gradcomp();
554  if (differ(fA.val(), f)) botch("fA = pow(xC,ycAI)", f, fA.val());
555  else if (differ(xC.adj(), dx)) botch("d pow(xC,ycAI)/dx", dx, xC.adj());
556  else if (differ(ycAI.adj(), dy)) botch("d pow(xC,ycAI)/dy", dy, ycAI.adj());
557  }
558  {
559  A::aval_reset();
560  cC xcC(xd);
561  cAI ycAI(yd);
562  fA = pow(xcC,ycAI);
563  A::Gradcomp();
564  if (differ(fA.val(), f)) botch("fA = pow(xcC,ycAI)", f, fA.val());
565  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,ycAI)/dx", dx, xcC.adj());
566  else if (differ(ycAI.adj(), dy)) botch("d pow(xcC,ycAI)/dy", dy, ycAI.adj());
567  }
568  xC = xd;
569  yA = yd;
570  fA = pow(xC,yA);
571  A::Gradcomp();
572  if (differ(fA.val(), f)) botch("fA = pow(xC,yA)", f, fA.val());
573  else if (differ(xC.adj(), dx)) botch("d pow(xC,yA)/dx", dx, xC.adj());
574  else if (differ(yA.adj(), dy)) botch("d pow(xC,yA)/dy", dy, yA.adj());
575  {
576  A::aval_reset();
577  cC xcC(xd);
578  yA = yd;
579  fA = pow(xcC,yA);
580  A::Gradcomp();
581  if (differ(fA.val(), f)) botch("fA = pow(xcC,yA)", f, fA.val());
582  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,yA)/dx", dx, xcC.adj());
583  else if (differ(yA.adj(), dy)) botch("d pow(xcC,yA)/dy", dy, yA.adj());
584  }
585  {
586  A::aval_reset();
587  xC = xd;
588  cA ycA(yd);
589  fA = pow(xC,ycA);
590  A::Gradcomp();
591  if (differ(fA.val(), f)) botch("fA = pow(xC,ycA)", f, fA.val());
592  else if (differ(xC.adj(), dx)) botch("d pow(xC,ycA)/dx", dx, xC.adj());
593  else if (differ(ycA.adj(), dy)) botch("d pow(xC,ycA)/dy", dy, ycA.adj());
594  }
595  {
596  A::aval_reset();
597  cC xcC(xd);
598  cA ycA(yd);
599  fA = pow(xcC,ycA);
600  A::Gradcomp();
601  if (differ(fA.val(), f)) botch("fA = pow(xcC,ycA)", f, fA.val());
602  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,ycA)/dx", dx, xcC.adj());
603  else if (differ(ycA.adj(), dy)) botch("d pow(xcC,ycA)/dy", dy, ycA.adj());
604  }
605  xC = xd;
606  yC = yd;
607  fA = pow(xC,yC);
608  A::Gradcomp();
609  if (differ(fA.val(), f)) botch("fA = pow(xC,yC)", f, fA.val());
610  else if (differ(xC.adj(), dx)) botch("d pow(xC,yC)/dx", dx, xC.adj());
611  else if (differ(yC.adj(), dy)) botch("d pow(xC,yC)/dy", dy, yC.adj());
612  {
613  A::aval_reset();
614  cC xcC(xd);
615  yC = yd;
616  fA = pow(xcC,yC);
617  A::Gradcomp();
618  if (differ(fA.val(), f)) botch("fA = pow(xcC,yC)", f, fA.val());
619  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,yC)/dx", dx, xcC.adj());
620  else if (differ(yC.adj(), dy)) botch("d pow(xcC,yC)/dy", dy, yC.adj());
621  }
622  {
623  A::aval_reset();
624  xC = xd;
625  cC ycC(yd);
626  fA = pow(xC,ycC);
627  A::Gradcomp();
628  if (differ(fA.val(), f)) botch("fA = pow(xC,ycC)", f, fA.val());
629  else if (differ(xC.adj(), dx)) botch("d pow(xC,ycC)/dx", dx, xC.adj());
630  else if (differ(ycC.adj(), dy)) botch("d pow(xC,ycC)/dy", dy, ycC.adj());
631  }
632  {
633  A::aval_reset();
634  cC xcC(xd);
635  cC ycC(yd);
636  fA = pow(xcC,ycC);
637  A::Gradcomp();
638  if (differ(fA.val(), f)) botch("fA = pow(xcC,ycC)", f, fA.val());
639  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,ycC)/dx", dx, xcC.adj());
640  else if (differ(ycC.adj(), dy)) botch("d pow(xcC,ycC)/dy", dy, ycC.adj());
641  }
642  {
643  xC = xd;
644  Ai yAi(yd);
645  fA = pow(xC,yAi);
646  A::Gradcomp();
647  if (differ(fA.val(), f)) botch("fA = pow(xC,yAi)", f, fA.val());
648  else if (differ(xC.adj(), dx)) botch("d pow(xC,yAi)/dx", dx, xC.adj());
649  else if (differ(yAi.aval, dy)) botch("d pow(xC,yAi)/dy", dy, yAi.aval);
650  }
651  {
652  A::aval_reset();
653  cC xcC(xd);
654  Ai yAi(yd);
655  fA = pow(xcC,yAi);
656  A::Gradcomp();
657  if (differ(fA.val(), f)) botch("fA = pow(xcC,yAi)", f, fA.val());
658  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,yAi)/dx", dx, xcC.adj());
659  else if (differ(yAi.aval, dy)) botch("d pow(xcC,yAi)/dy", dy, yAi.aval);
660  }
661  {
662  A::aval_reset();
663  xC = xd;
664  cAi ycAi(yd);
665  fA = pow(xC,ycAi);
666  A::Gradcomp();
667  if (differ(fA.val(), f)) botch("fA = pow(xC,ycAi)", f, fA.val());
668  else if (differ(xC.adj(), dx)) botch("d pow(xC,ycAi)/dx", dx, xC.adj());
669  else if (differ(ycAi.aval, dy)) botch("d pow(xC,ycAi)/dy", dy, ycAi.aval);
670  }
671  {
672  A::aval_reset();
673  cC xcC(xd);
674  cAi ycAi(yd);
675  fA = pow(xcC,ycAi);
676  A::Gradcomp();
677  if (differ(fA.val(), f)) botch("fA = pow(xcC,ycAi)", f, fA.val());
678  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,ycAi)/dx", dx, xcC.adj());
679  else if (differ(ycAi.aval, dy)) botch("d pow(xcC,ycAi)/dy", dy, ycAi.aval);
680  }
681  xC = xd;
682  fA = pow(xC,yd);
683  A::Gradcomp();
684  if (differ(fA.val(), f)) botch("fA = pow(xC,yd)", f, fA.val());
685  else if (differ(xC.adj(), dx)) botch("d pow(xC,yd)/dx", dx, xC.adj());
686  {
687  A::aval_reset();
688  cC xcC(xd);
689  fA = pow(xcC,yd);
690  A::Gradcomp();
691  if (differ(fA.val(), f)) botch("fA = pow(xcC,yd)", f, fA.val());
692  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,yd)/dx", dx, xcC.adj());
693  }
694  xC = xd;
695  yL = (long)yd;
696  fA = pow(xC,yL);
697  A::Gradcomp();
698  if (differ(fA.val(), f)) botch("fA = pow(xC,yL)", f, fA.val());
699  else if (differ(xC.adj(), dx)) botch("d pow(xC,yL)/dx", dx, xC.adj());
700  {
701  A::aval_reset();
702  cC xcC(xd);
703  yL = (long)yd;
704  fA = pow(xcC,yL);
705  A::Gradcomp();
706  if (differ(fA.val(), f)) botch("fA = pow(xcC,yL)", f, fA.val());
707  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,yL)/dx", dx, xcC.adj());
708  }
709  xC = xd;
710  yi = (int)yd;
711  fA = pow(xC,yi);
712  A::Gradcomp();
713  if (differ(fA.val(), f)) botch("fA = pow(xC,yi)", f, fA.val());
714  else if (differ(xC.adj(), dx)) botch("d pow(xC,yi)/dx", dx, xC.adj());
715  {
716  A::aval_reset();
717  cC xcC(xd);
718  yi = (int)yd;
719  fA = pow(xcC,yi);
720  A::Gradcomp();
721  if (differ(fA.val(), f)) botch("fA = pow(xcC,yi)", f, fA.val());
722  else if (differ(xcC.adj(), dx)) botch("d pow(xcC,yi)/dx", dx, xcC.adj());
723  }
724  {
725  Ai xAi(xd);
726  yAI = yd;
727  fA = pow(xAi,yAI);
728  A::Gradcomp();
729  if (differ(fA.val(), f)) botch("fA = pow(xAi,yAI)", f, fA.val());
730  else if (differ(xAi.aval, dx)) botch("d pow(xAi,yAI)/dx", dx, xAi.aval);
731  else if (differ(yAI.adj(), dy)) botch("d pow(xAi,yAI)/dy", dy, yAI.adj());
732  }
733  {
734  A::aval_reset();
735  cAi xcAi(xd);
736  yAI = yd;
737  fA = pow(xcAi,yAI);
738  A::Gradcomp();
739  if (differ(fA.val(), f)) botch("fA = pow(xcAi,yAI)", f, fA.val());
740  else if (differ(xcAi.aval, dx)) botch("d pow(xcAi,yAI)/dx", dx, xcAi.aval);
741  else if (differ(yAI.adj(), dy)) botch("d pow(xcAi,yAI)/dy", dy, yAI.adj());
742  }
743  {
744  A::aval_reset();
745  Ai xAi(xd);
746  cAI ycAI(yd);
747  fA = pow(xAi,ycAI);
748  A::Gradcomp();
749  if (differ(fA.val(), f)) botch("fA = pow(xAi,ycAI)", f, fA.val());
750  else if (differ(xAi.aval, dx)) botch("d pow(xAi,ycAI)/dx", dx, xAi.aval);
751  else if (differ(ycAI.adj(), dy)) botch("d pow(xAi,ycAI)/dy", dy, ycAI.adj());
752  }
753  {
754  Ai xAi(xd);
755  yA = yd;
756  fA = pow(xAi,yA);
757  A::Gradcomp();
758  if (differ(fA.val(), f)) botch("fA = pow(xAi,yA)", f, fA.val());
759  else if (differ(xAi.aval, dx)) botch("d pow(xAi,yA)/dx", dx, xAi.aval);
760  else if (differ(yA.adj(), dy)) botch("d pow(xAi,yA)/dy", dy, yA.adj());
761  }
762  {
763  A::aval_reset();
764  cAi xcAi(xd);
765  yA = yd;
766  fA = pow(xcAi,yA);
767  A::Gradcomp();
768  if (differ(fA.val(), f)) botch("fA = pow(xcAi,yA)", f, fA.val());
769  else if (differ(xcAi.aval, dx)) botch("d pow(xcAi,yA)/dx", dx, xcAi.aval);
770  else if (differ(yA.adj(), dy)) botch("d pow(xcAi,yA)/dy", dy, yA.adj());
771  }
772  {
773  A::aval_reset();
774  Ai xAi(xd);
775  cA ycA(yd);
776  fA = pow(xAi,ycA);
777  A::Gradcomp();
778  if (differ(fA.val(), f)) botch("fA = pow(xAi,ycA)", f, fA.val());
779  else if (differ(xAi.aval, dx)) botch("d pow(xAi,ycA)/dx", dx, xAi.aval);
780  else if (differ(ycA.adj(), dy)) botch("d pow(xAi,ycA)/dy", dy, ycA.adj());
781  }
782  {
783  Ai xAi(xd);
784  yC = yd;
785  fA = pow(xAi,yC);
786  A::Gradcomp();
787  if (differ(fA.val(), f)) botch("fA = pow(xAi,yC)", f, fA.val());
788  else if (differ(xAi.aval, dx)) botch("d pow(xAi,yC)/dx", dx, xAi.aval);
789  else if (differ(yC.adj(), dy)) botch("d pow(xAi,yC)/dy", dy, yC.adj());
790  }
791  {
792  A::aval_reset();
793  cAi xcAi(xd);
794  yC = yd;
795  fA = pow(xcAi,yC);
796  A::Gradcomp();
797  if (differ(fA.val(), f)) botch("fA = pow(xcAi,yC)", f, fA.val());
798  else if (differ(xcAi.aval, dx)) botch("d pow(xcAi,yC)/dx", dx, xcAi.aval);
799  else if (differ(yC.adj(), dy)) botch("d pow(xcAi,yC)/dy", dy, yC.adj());
800  }
801  {
802  A::aval_reset();
803  Ai xAi(xd);
804  cC ycC(yd);
805  fA = pow(xAi,ycC);
806  A::Gradcomp();
807  if (differ(fA.val(), f)) botch("fA = pow(xAi,ycC)", f, fA.val());
808  else if (differ(xAi.aval, dx)) botch("d pow(xAi,ycC)/dx", dx, xAi.aval);
809  else if (differ(ycC.adj(), dy)) botch("d pow(xAi,ycC)/dy", dy, ycC.adj());
810  }
811  {
812  Ai xAi(xd);
813  Ai yAi(yd);
814  fA = pow(xAi,yAi);
815  A::Gradcomp();
816  if (differ(fA.val(), f)) botch("fA = pow(xAi,yAi)", f, fA.val());
817  else if (differ(xAi.aval, dx)) botch("d pow(xAi,yAi)/dx", dx, xAi.aval);
818  else if (differ(yAi.aval, dy)) botch("d pow(xAi,yAi)/dy", dy, yAi.aval);
819  }
820  {
821  A::aval_reset();
822  cAi xcAi(xd);
823  Ai yAi(yd);
824  fA = pow(xcAi,yAi);
825  A::Gradcomp();
826  if (differ(fA.val(), f)) botch("fA = pow(xcAi,yAi)", f, fA.val());
827  else if (differ(xcAi.aval, dx)) botch("d pow(xcAi,yAi)/dx", dx, xcAi.aval);
828  else if (differ(yAi.aval, dy)) botch("d pow(xcAi,yAi)/dy", dy, yAi.aval);
829  }
830  {
831  A::aval_reset();
832  Ai xAi(xd);
833  cAi ycAi(yd);
834  fA = pow(xAi,ycAi);
835  A::Gradcomp();
836  if (differ(fA.val(), f)) botch("fA = pow(xAi,ycAi)", f, fA.val());
837  else if (differ(xAi.aval, dx)) botch("d pow(xAi,ycAi)/dx", dx, xAi.aval);
838  else if (differ(ycAi.aval, dy)) botch("d pow(xAi,ycAi)/dy", dy, ycAi.aval);
839  }
840  {
841  Ai xAi(xd);
842  fA = pow(xAi,yd);
843  A::Gradcomp();
844  if (differ(fA.val(), f)) botch("fA = pow(xAi,yd)", f, fA.val());
845  else if (differ(xAi.aval, dx)) botch("d pow(xAi,yd)/dx", dx, xAi.aval);
846  }
847  {
848  A::aval_reset();
849  cAi xcAi(xd);
850  fA = pow(xcAi,yd);
851  A::Gradcomp();
852  if (differ(fA.val(), f)) botch("fA = pow(xcAi,yd)", f, fA.val());
853  else if (differ(xcAi.aval, dx)) botch("d pow(xcAi,yd)/dx", dx, xcAi.aval);
854  }
855  {
856  Ai xAi(xd);
857  yL = (long)yd;
858  fA = pow(xAi,yL);
859  A::Gradcomp();
860  if (differ(fA.val(), f)) botch("fA = pow(xAi,yL)", f, fA.val());
861  else if (differ(xAi.aval, dx)) botch("d pow(xAi,yL)/dx", dx, xAi.aval);
862  }
863  {
864  A::aval_reset();
865  cAi xcAi(xd);
866  yL = (long)yd;
867  fA = pow(xcAi,yL);
868  A::Gradcomp();
869  if (differ(fA.val(), f)) botch("fA = pow(xcAi,yL)", f, fA.val());
870  else if (differ(xcAi.aval, dx)) botch("d pow(xcAi,yL)/dx", dx, xcAi.aval);
871  }
872  {
873  Ai xAi(xd);
874  yi = (int)yd;
875  fA = pow(xAi,yi);
876  A::Gradcomp();
877  if (differ(fA.val(), f)) botch("fA = pow(xAi,yi)", f, fA.val());
878  else if (differ(xAi.aval, dx)) botch("d pow(xAi,yi)/dx", dx, xAi.aval);
879  }
880  {
881  A::aval_reset();
882  cAi xcAi(xd);
883  yi = (int)yd;
884  fA = pow(xcAi,yi);
885  A::Gradcomp();
886  if (differ(fA.val(), f)) botch("fA = pow(xcAi,yi)", f, fA.val());
887  else if (differ(xcAi.aval, dx)) botch("d pow(xcAi,yi)/dx", dx, xcAi.aval);
888  }
889  yAI = yd;
890  fA = pow(xd,yAI);
891  A::Gradcomp();
892  if (differ(fA.val(), f)) botch("fA = pow(xd,yAI)", f, fA.val());
893  else if (differ(yAI.adj(), dy)) botch("d pow(xd,yAI)/dy", dy, yAI.adj());
894  {
895  A::aval_reset();
896  cAI ycAI(yd);
897  fA = pow(xd,ycAI);
898  A::Gradcomp();
899  if (differ(fA.val(), f)) botch("fA = pow(xd,ycAI)", f, fA.val());
900  else if (differ(ycAI.adj(), dy)) botch("d pow(xd,ycAI)/dy", dy, ycAI.adj());
901  }
902  yA = yd;
903  fA = pow(xd,yA);
904  A::Gradcomp();
905  if (differ(fA.val(), f)) botch("fA = pow(xd,yA)", f, fA.val());
906  else if (differ(yA.adj(), dy)) botch("d pow(xd,yA)/dy", dy, yA.adj());
907  {
908  A::aval_reset();
909  cA ycA(yd);
910  fA = pow(xd,ycA);
911  A::Gradcomp();
912  if (differ(fA.val(), f)) botch("fA = pow(xd,ycA)", f, fA.val());
913  else if (differ(ycA.adj(), dy)) botch("d pow(xd,ycA)/dy", dy, ycA.adj());
914  }
915  yC = yd;
916  fA = pow(xd,yC);
917  A::Gradcomp();
918  if (differ(fA.val(), f)) botch("fA = pow(xd,yC)", f, fA.val());
919  else if (differ(yC.adj(), dy)) botch("d pow(xd,yC)/dy", dy, yC.adj());
920  {
921  A::aval_reset();
922  cC ycC(yd);
923  fA = pow(xd,ycC);
924  A::Gradcomp();
925  if (differ(fA.val(), f)) botch("fA = pow(xd,ycC)", f, fA.val());
926  else if (differ(ycC.adj(), dy)) botch("d pow(xd,ycC)/dy", dy, ycC.adj());
927  }
928  {
929  Ai yAi(yd);
930  fA = pow(xd,yAi);
931  A::Gradcomp();
932  if (differ(fA.val(), f)) botch("fA = pow(xd,yAi)", f, fA.val());
933  else if (differ(yAi.aval, dy)) botch("d pow(xd,yAi)/dy", dy, yAi.aval);
934  }
935  {
936  A::aval_reset();
937  cAi ycAi(yd);
938  fA = pow(xd,ycAi);
939  A::Gradcomp();
940  if (differ(fA.val(), f)) botch("fA = pow(xd,ycAi)", f, fA.val());
941  else if (differ(ycAi.aval, dy)) botch("d pow(xd,ycAi)/dy", dy, ycAi.aval);
942  }
943  xL = (long)xd;
944  yAI = yd;
945  fA = pow(xL,yAI);
946  A::Gradcomp();
947  if (differ(fA.val(), f)) botch("fA = pow(xL,yAI)", f, fA.val());
948  else if (differ(yAI.adj(), dy)) botch("d pow(xL,yAI)/dy", dy, yAI.adj());
949  {
950  A::aval_reset();
951  xL = (long)xd;
952  cAI ycAI(yd);
953  fA = pow(xL,ycAI);
954  A::Gradcomp();
955  if (differ(fA.val(), f)) botch("fA = pow(xL,ycAI)", f, fA.val());
956  else if (differ(ycAI.adj(), dy)) botch("d pow(xL,ycAI)/dy", dy, ycAI.adj());
957  }
958  xL = (long)xd;
959  yA = yd;
960  fA = pow(xL,yA);
961  A::Gradcomp();
962  if (differ(fA.val(), f)) botch("fA = pow(xL,yA)", f, fA.val());
963  else if (differ(yA.adj(), dy)) botch("d pow(xL,yA)/dy", dy, yA.adj());
964  {
965  A::aval_reset();
966  xL = (long)xd;
967  cA ycA(yd);
968  fA = pow(xL,ycA);
969  A::Gradcomp();
970  if (differ(fA.val(), f)) botch("fA = pow(xL,ycA)", f, fA.val());
971  else if (differ(ycA.adj(), dy)) botch("d pow(xL,ycA)/dy", dy, ycA.adj());
972  }
973  xL = (long)xd;
974  yC = yd;
975  fA = pow(xL,yC);
976  A::Gradcomp();
977  if (differ(fA.val(), f)) botch("fA = pow(xL,yC)", f, fA.val());
978  else if (differ(yC.adj(), dy)) botch("d pow(xL,yC)/dy", dy, yC.adj());
979  {
980  A::aval_reset();
981  xL = (long)xd;
982  cC ycC(yd);
983  fA = pow(xL,ycC);
984  A::Gradcomp();
985  if (differ(fA.val(), f)) botch("fA = pow(xL,ycC)", f, fA.val());
986  else if (differ(ycC.adj(), dy)) botch("d pow(xL,ycC)/dy", dy, ycC.adj());
987  }
988  {
989  xL = (long)xd;
990  Ai yAi(yd);
991  fA = pow(xL,yAi);
992  A::Gradcomp();
993  if (differ(fA.val(), f)) botch("fA = pow(xL,yAi)", f, fA.val());
994  else if (differ(yAi.aval, dy)) botch("d pow(xL,yAi)/dy", dy, yAi.aval);
995  }
996  {
997  A::aval_reset();
998  xL = (long)xd;
999  cAi ycAi(yd);
1000  fA = pow(xL,ycAi);
1001  A::Gradcomp();
1002  if (differ(fA.val(), f)) botch("fA = pow(xL,ycAi)", f, fA.val());
1003  else if (differ(ycAi.aval, dy)) botch("d pow(xL,ycAi)/dy", dy, ycAi.aval);
1004  }
1005  xi = (int)xd;
1006  yAI = yd;
1007  fA = pow(xi,yAI);
1008  A::Gradcomp();
1009  if (differ(fA.val(), f)) botch("fA = pow(xi,yAI)", f, fA.val());
1010  else if (differ(yAI.adj(), dy)) botch("d pow(xi,yAI)/dy", dy, yAI.adj());
1011  {
1012  A::aval_reset();
1013  xi = (int)xd;
1014  cAI ycAI(yd);
1015  fA = pow(xi,ycAI);
1016  A::Gradcomp();
1017  if (differ(fA.val(), f)) botch("fA = pow(xi,ycAI)", f, fA.val());
1018  else if (differ(ycAI.adj(), dy)) botch("d pow(xi,ycAI)/dy", dy, ycAI.adj());
1019  }
1020  xi = (int)xd;
1021  yA = yd;
1022  fA = pow(xi,yA);
1023  A::Gradcomp();
1024  if (differ(fA.val(), f)) botch("fA = pow(xi,yA)", f, fA.val());
1025  else if (differ(yA.adj(), dy)) botch("d pow(xi,yA)/dy", dy, yA.adj());
1026  {
1027  A::aval_reset();
1028  xi = (int)xd;
1029  cA ycA(yd);
1030  fA = pow(xi,ycA);
1031  A::Gradcomp();
1032  if (differ(fA.val(), f)) botch("fA = pow(xi,ycA)", f, fA.val());
1033  else if (differ(ycA.adj(), dy)) botch("d pow(xi,ycA)/dy", dy, ycA.adj());
1034  }
1035  xi = (int)xd;
1036  yC = yd;
1037  fA = pow(xi,yC);
1038  A::Gradcomp();
1039  if (differ(fA.val(), f)) botch("fA = pow(xi,yC)", f, fA.val());
1040  else if (differ(yC.adj(), dy)) botch("d pow(xi,yC)/dy", dy, yC.adj());
1041  {
1042  A::aval_reset();
1043  xi = (int)xd;
1044  cC ycC(yd);
1045  fA = pow(xi,ycC);
1046  A::Gradcomp();
1047  if (differ(fA.val(), f)) botch("fA = pow(xi,ycC)", f, fA.val());
1048  else if (differ(ycC.adj(), dy)) botch("d pow(xi,ycC)/dy", dy, ycC.adj());
1049  }
1050  {
1051  xi = (int)xd;
1052  Ai yAi(yd);
1053  fA = pow(xi,yAi);
1054  A::Gradcomp();
1055  if (differ(fA.val(), f)) botch("fA = pow(xi,yAi)", f, fA.val());
1056  else if (differ(yAi.aval, dy)) botch("d pow(xi,yAi)/dy", dy, yAi.aval);
1057  }
1058  {
1059  A::aval_reset();
1060  xi = (int)xd;
1061  cAi ycAi(yd);
1062  fA = pow(xi,ycAi);
1063  A::Gradcomp();
1064  if (differ(fA.val(), f)) botch("fA = pow(xi,ycAi)", f, fA.val());
1065  else if (differ(ycAi.aval, dy)) botch("d pow(xi,ycAi)/dy", dy, ycAi.aval);
1066  }
1067 
1068 
1069  if (!rc) // chatter for cppunit test, which cannot tolerate silence
1070 
1071  printf("OK\n");
1072 
1073  return rc;
1074 
1075  }
ADT_RAD ADvari< double > Ai
int botch(ExpectedAnswer *e, const char *partial, double got, double wanted)
void f()
#define ADT_RAD
expr expr dx(i)
ADT_RAD IndepADvar< double > AI
const ADT_RAD IndepADvar< double > cAI
#define Ai
Definition: Sacado_rad.hpp:575
#define C(x)
#define A
Definition: Sacado_rad.hpp:572
int main()
Definition: ad_example.cpp:191
const ADT_RAD ADvari< double > cAi
static int differ(double a, double b)
Definition: hesopcheck.cpp:147
log(expr.val())
const ADT_RAD ConstADvar< double > cC
const double tol
SACADO_INLINE_FUNCTION mpl::enable_if_c< ExprLevel< Expr< T1 > >::value==ExprLevel< Expr< T2 > >::value, Expr< PowerOp< Expr< T1 >, Expr< T2 > > > >::type pow(const Expr< T1 > &expr1, const Expr< T2 > &expr2)
static int rc
#define AI
Definition: Sacado_rad.hpp:576
const ADT_RAD ADvar< double > cA