NeoPZ
tinyfadnineteen.h
Go to the documentation of this file.
1 #ifndef _tinyfadnineteen_h_
2 #define _tinyfadnineteen_h_
3 
4 //*********************************************************
5 // This file is generated by generate.cc.
6 // Use this file for any modification
7 //*********************************************************
8 
9 template <class T> class TinyFad<19,T> {
10 public:
11  typedef T value_type;
12  typedef T grad_type;
13 protected:
14 
15  int n;
16  T val_;
17 
18  T dx0_;
19  T dx1_;
20  T dx2_;
21  T dx3_;
22  T dx4_;
23  T dx5_;
24  T dx6_;
25  T dx7_;
26  T dx8_;
27  T dx9_;
28  T dx10_;
29  T dx11_;
30  T dx12_;
31  T dx13_;
32  T dx14_;
33  T dx15_;
34  T dx16_;
35  T dx17_;
36  T dx18_;
37 
38 
39 public:
40  void diff(const size_t ith, const size_t sz){
41  n = ith+1;
42  dx0_ = T(0.);
43  dx1_ = T(0.);
44  dx2_ = T(0.);
45  dx3_ = T(0.);
46  dx4_ = T(0.);
47  dx5_ = T(0.);
48  dx6_ = T(0.);
49  dx7_ = T(0.);
50  dx8_ = T(0.);
51  dx9_ = T(0.);
52  dx10_ = T(0.);
53  dx11_ = T(0.);
54  dx12_ = T(0.);
55  dx13_ = T(0.);
56  dx14_ = T(0.);
57  dx15_ = T(0.);
58  dx16_ = T(0.);
59  dx17_ = T(0.);
60  dx18_ = T(0.);
61 
62  switch(ith){
63  case 0 : dx0_ = T(1.);break;
64  case 1 : dx1_ = T(1.);break;
65  case 2 : dx2_ = T(1.);break;
66  case 3 : dx3_ = T(1.);break;
67  case 4 : dx4_ = T(1.);break;
68  case 5 : dx5_ = T(1.);break;
69  case 6 : dx6_ = T(1.);break;
70  case 7 : dx7_ = T(1.);break;
71  case 8 : dx8_ = T(1.);break;
72  case 9 : dx9_ = T(1.);break;
73  case 10 : dx10_ = T(1.);break;
74  case 11 : dx11_ = T(1.);break;
75  case 12 : dx12_ = T(1.);break;
76  case 13 : dx13_ = T(1.);break;
77  case 14 : dx14_ = T(1.);break;
78  case 15 : dx15_ = T(1.);break;
79  case 16 : dx16_ = T(1.);break;
80  case 17 : dx17_ = T(1.);break;
81  case 18 : dx18_ = T(1.);break;
82  default : cout << "ith = " << ith << " out of definition set" << endl;exit(1);
83  }
84  }
85 
86  TinyFad(const T& ind, const int ini) : n(ini+1), val_(ind) {
87  dx0_ = T(0.);
88  dx1_ = T(0.);
89  dx2_ = T(0.);
90  dx3_ = T(0.);
91  dx4_ = T(0.);
92  dx5_ = T(0.);
93  dx6_ = T(0.);
94  dx7_ = T(0.);
95  dx8_ = T(0.);
96  dx9_ = T(0.);
97  dx10_ = T(0.);
98  dx11_ = T(0.);
99  dx12_ = T(0.);
100  dx13_ = T(0.);
101  dx14_ = T(0.);
102  dx15_ = T(0.);
103  dx16_ = T(0.);
104  dx17_ = T(0.);
105  dx18_ = T(0.);
106 
107  switch(ini){
108  case 0 : dx0_ = T(1.);break;
109  case 1 : dx1_ = T(1.);break;
110  case 2 : dx2_ = T(1.);break;
111  case 3 : dx3_ = T(1.);break;
112  case 4 : dx4_ = T(1.);break;
113  case 5 : dx5_ = T(1.);break;
114  case 6 : dx6_ = T(1.);break;
115  case 7 : dx7_ = T(1.);break;
116  case 8 : dx8_ = T(1.);break;
117  case 9 : dx9_ = T(1.);break;
118  case 10 : dx10_ = T(1.);break;
119  case 11 : dx11_ = T(1.);break;
120  case 12 : dx12_ = T(1.);break;
121  case 13 : dx13_ = T(1.);break;
122  case 14 : dx14_ = T(1.);break;
123  case 15 : dx15_ = T(1.);break;
124  case 16 : dx16_ = T(1.);break;
125  case 17 : dx17_ = T(1.);break;
126  case 18 : dx18_ = T(1.);break;
127  default : cout << "ini = " << ini << " out of definition set" << endl;exit(1);
128  }
129  }
130  TinyFad() : n(0), val_(0.) {
131  dx0_ = T(0.);
132  dx1_ = T(0.);
133  dx2_ = T(0.);
134  dx3_ = T(0.);
135  dx4_ = T(0.);
136  dx5_ = T(0.);
137  dx6_ = T(0.);
138  dx7_ = T(0.);
139  dx8_ = T(0.);
140  dx9_ = T(0.);
141  dx10_ = T(0.);
142  dx11_ = T(0.);
143  dx12_ = T(0.);
144  dx13_ = T(0.);
145  dx14_ = T(0.);
146  dx15_ = T(0.);
147  dx16_ = T(0.);
148  dx17_ = T(0.);
149  dx18_ = T(0.);
150  }
151  TinyFad(const No_Initialization &): n(0) {}
152  TinyFad(const T& in) : n(0), val_(in) {
153  dx0_ = T(0.);
154  dx1_ = T(0.);
155  dx2_ = T(0.);
156  dx3_ = T(0.);
157  dx4_ = T(0.);
158  dx5_ = T(0.);
159  dx6_ = T(0.);
160  dx7_ = T(0.);
161  dx8_ = T(0.);
162  dx9_ = T(0.);
163  dx10_ = T(0.);
164  dx11_ = T(0.);
165  dx12_ = T(0.);
166  dx13_ = T(0.);
167  dx14_ = T(0.);
168  dx15_ = T(0.);
169  dx16_ = T(0.);
170  dx17_ = T(0.);
171  dx18_ = T(0.);
172  }
173  TinyFad(const TinyFad<19,T> & in) : n(0), val_(in.val_) {
174  dx0_ = in.dx0_;
175  dx1_ = in.dx1_;
176  dx2_ = in.dx2_;
177  dx3_ = in.dx3_;
178  dx4_ = in.dx4_;
179  dx5_ = in.dx5_;
180  dx6_ = in.dx6_;
181  dx7_ = in.dx7_;
182  dx8_ = in.dx8_;
183  dx9_ = in.dx9_;
184  dx10_ = in.dx10_;
185  dx11_ = in.dx11_;
186  dx12_ = in.dx12_;
187  dx13_ = in.dx13_;
188  dx14_ = in.dx14_;
189  dx15_ = in.dx15_;
190  dx16_ = in.dx16_;
191  dx17_ = in.dx17_;
192  dx18_ = in.dx18_;
193  }
194 
195  ~TinyFad() {}
196 
197  int N() const {return n-1;}
198 
199  const T& val() const { return val_;}
200  T& val() { return val_;}
201 
202  const T& d0() const { return dx0_;}
203  T& d0() { return dx0_;}
204 
205  const T& d1() const { return dx1_;}
206  T& d1() { return dx1_;}
207 
208  const T& d2() const { return dx2_;}
209  T& d2() { return dx2_;}
210 
211  const T& d3() const { return dx3_;}
212  T& d3() { return dx3_;}
213 
214  const T& d4() const { return dx4_;}
215  T& d4() { return dx4_;}
216 
217  const T& d5() const { return dx5_;}
218  T& d5() { return dx5_;}
219 
220  const T& d6() const { return dx6_;}
221  T& d6() { return dx6_;}
222 
223  const T& d7() const { return dx7_;}
224  T& d7() { return dx7_;}
225 
226  const T& d8() const { return dx8_;}
227  T& d8() { return dx8_;}
228 
229  const T& d9() const { return dx9_;}
230  T& d9() { return dx9_;}
231 
232  const T& d10() const { return dx10_;}
233  T& d10() { return dx10_;}
234 
235  const T& d11() const { return dx11_;}
236  T& d11() { return dx11_;}
237 
238  const T& d12() const { return dx12_;}
239  T& d12() { return dx12_;}
240 
241  const T& d13() const { return dx13_;}
242  T& d13() { return dx13_;}
243 
244  const T& d14() const { return dx14_;}
245  T& d14() { return dx14_;}
246 
247  const T& d15() const { return dx15_;}
248  T& d15() { return dx15_;}
249 
250  const T& d16() const { return dx16_;}
251  T& d16() { return dx16_;}
252 
253  const T& d17() const { return dx17_;}
254  T& d17() { return dx17_;}
255 
256  const T& d18() const { return dx18_;}
257  T& d18() { return dx18_;}
258 
259  T& dx(int i){
260  switch(i){
261  case 0 : return dx0_;
262  case 1 : return dx1_;
263  case 2 : return dx2_;
264  case 3 : return dx3_;
265  case 4 : return dx4_;
266  case 5 : return dx5_;
267  case 6 : return dx6_;
268  case 7 : return dx7_;
269  case 8 : return dx8_;
270  case 9 : return dx9_;
271  case 10 : return dx10_;
272  case 11 : return dx11_;
273  case 12 : return dx12_;
274  case 13 : return dx13_;
275  case 14 : return dx14_;
276  case 15 : return dx15_;
277  case 16 : return dx16_;
278  case 17 : return dx17_;
279  case 18 : return dx18_;
280  default : cout << "i out of bounds" << endl;exit(1);
281  }
282  }
283  const T& dx(int i) const {
284  switch(i){
285  case 0 : return dx0_;
286  case 1 : return dx1_;
287  case 2 : return dx2_;
288  case 3 : return dx3_;
289  case 4 : return dx4_;
290  case 5 : return dx5_;
291  case 6 : return dx6_;
292  case 7 : return dx7_;
293  case 8 : return dx8_;
294  case 9 : return dx9_;
295  case 10 : return dx10_;
296  case 11 : return dx11_;
297  case 12 : return dx12_;
298  case 13 : return dx13_;
299  case 14 : return dx14_;
300  case 15 : return dx15_;
301  case 16 : return dx16_;
302  case 17 : return dx17_;
303  case 18 : return dx18_;
304  default : cout << "i out of bounds" << endl;exit(1);
305  }
306  }
307  T& d(int i){
308  switch(i){
309  case 0 : return dx0_;
310  case 1 : return dx1_;
311  case 2 : return dx2_;
312  case 3 : return dx3_;
313  case 4 : return dx4_;
314  case 5 : return dx5_;
315  case 6 : return dx6_;
316  case 7 : return dx7_;
317  case 8 : return dx8_;
318  case 9 : return dx9_;
319  case 10 : return dx10_;
320  case 11 : return dx11_;
321  case 12 : return dx12_;
322  case 13 : return dx13_;
323  case 14 : return dx14_;
324  case 15 : return dx15_;
325  case 16 : return dx16_;
326  case 17 : return dx17_;
327  case 18 : return dx18_;
328  default : cout << "i out of bounds" << endl;exit(1);
329  }
330  }
331  const T& d(int i) const {
332  switch(i){
333  case 0 : return dx0_;
334  case 1 : return dx1_;
335  case 2 : return dx2_;
336  case 3 : return dx3_;
337  case 4 : return dx4_;
338  case 5 : return dx5_;
339  case 6 : return dx6_;
340  case 7 : return dx7_;
341  case 8 : return dx8_;
342  case 9 : return dx9_;
343  case 10 : return dx10_;
344  case 11 : return dx11_;
345  case 12 : return dx12_;
346  case 13 : return dx13_;
347  case 14 : return dx14_;
348  case 15 : return dx15_;
349  case 16 : return dx16_;
350  case 17 : return dx17_;
351  case 18 : return dx18_;
352  default : cout << "i out of bounds" << endl;exit(1);
353  }
354  }
355 
357  val_ = in.val_;
358 
359  dx0_ = in.dx0_;
360  dx1_ = in.dx1_;
361  dx2_ = in.dx2_;
362  dx3_ = in.dx3_;
363  dx4_ = in.dx4_;
364  dx5_ = in.dx5_;
365  dx6_ = in.dx6_;
366  dx7_ = in.dx7_;
367  dx8_ = in.dx8_;
368  dx9_ = in.dx9_;
369  dx10_ = in.dx10_;
370  dx11_ = in.dx11_;
371  dx12_ = in.dx12_;
372  dx13_ = in.dx13_;
373  dx14_ = in.dx14_;
374  dx15_ = in.dx15_;
375  dx16_ = in.dx16_;
376  dx17_ = in.dx17_;
377  dx18_ = in.dx18_;
378 
379  return *this;
380  }
381 
382  TinyFad<19,T> & operator = (const T & in){
383  val_ = in;
384 
385  dx0_ = T(0.);
386  dx1_ = T(0.);
387  dx2_ = T(0.);
388  dx3_ = T(0.);
389  dx4_ = T(0.);
390  dx5_ = T(0.);
391  dx6_ = T(0.);
392  dx7_ = T(0.);
393  dx8_ = T(0.);
394  dx9_ = T(0.);
395  dx10_ = T(0.);
396  dx11_ = T(0.);
397  dx12_ = T(0.);
398  dx13_ = T(0.);
399  dx14_ = T(0.);
400  dx15_ = T(0.);
401  dx16_ = T(0.);
402  dx17_ = T(0.);
403  dx18_ = T(0.);
404 
405  return *this;
406  }
407 
409  dx0_ += in.dx0_;
410  dx1_ += in.dx1_;
411  dx2_ += in.dx2_;
412  dx3_ += in.dx3_;
413  dx4_ += in.dx4_;
414  dx5_ += in.dx5_;
415  dx6_ += in.dx6_;
416  dx7_ += in.dx7_;
417  dx8_ += in.dx8_;
418  dx9_ += in.dx9_;
419  dx10_ += in.dx10_;
420  dx11_ += in.dx11_;
421  dx12_ += in.dx12_;
422  dx13_ += in.dx13_;
423  dx14_ += in.dx14_;
424  dx15_ += in.dx15_;
425  dx16_ += in.dx16_;
426  dx17_ += in.dx17_;
427  dx18_ += in.dx18_;
428  val_ += in.val_;
429 
430 
431  return *this;
432  }
434  dx0_ -= in.dx0_;
435  dx1_ -= in.dx1_;
436  dx2_ -= in.dx2_;
437  dx3_ -= in.dx3_;
438  dx4_ -= in.dx4_;
439  dx5_ -= in.dx5_;
440  dx6_ -= in.dx6_;
441  dx7_ -= in.dx7_;
442  dx8_ -= in.dx8_;
443  dx9_ -= in.dx9_;
444  dx10_ -= in.dx10_;
445  dx11_ -= in.dx11_;
446  dx12_ -= in.dx12_;
447  dx13_ -= in.dx13_;
448  dx14_ -= in.dx14_;
449  dx15_ -= in.dx15_;
450  dx16_ -= in.dx16_;
451  dx17_ -= in.dx17_;
452  dx18_ -= in.dx18_;
453  val_ -= in.val_;
454 
455  return *this;
456  }
458  dx0_ = dx0_ * in.val_ + val_ * in.dx0_;
459  dx1_ = dx1_ * in.val_ + val_ * in.dx1_;
460  dx2_ = dx2_ * in.val_ + val_ * in.dx2_;
461  dx3_ = dx3_ * in.val_ + val_ * in.dx3_;
462  dx4_ = dx4_ * in.val_ + val_ * in.dx4_;
463  dx5_ = dx5_ * in.val_ + val_ * in.dx5_;
464  dx6_ = dx6_ * in.val_ + val_ * in.dx6_;
465  dx7_ = dx7_ * in.val_ + val_ * in.dx7_;
466  dx8_ = dx8_ * in.val_ + val_ * in.dx8_;
467  dx9_ = dx9_ * in.val_ + val_ * in.dx9_;
468  dx10_ = dx10_ * in.val_ + val_ * in.dx10_;
469  dx11_ = dx11_ * in.val_ + val_ * in.dx11_;
470  dx12_ = dx12_ * in.val_ + val_ * in.dx12_;
471  dx13_ = dx13_ * in.val_ + val_ * in.dx13_;
472  dx14_ = dx14_ * in.val_ + val_ * in.dx14_;
473  dx15_ = dx15_ * in.val_ + val_ * in.dx15_;
474  dx16_ = dx16_ * in.val_ + val_ * in.dx16_;
475  dx17_ = dx17_ * in.val_ + val_ * in.dx17_;
476  dx18_ = dx18_ * in.val_ + val_ * in.dx18_;
477  val_ *= in.val_;
478 
479  return *this;
480  }
482  if (in.val_ == 0.) error("TinyFad & TinyFad::operator /= (const TinyFad & in), dividing by 0");
483  dx0_ = ( dx0_ * in.val_ - val_ * in.dx0_ ) / in.val_ / in.val_ ;
484  dx1_ = ( dx1_ * in.val_ - val_ * in.dx1_ ) / in.val_ / in.val_ ;
485  dx2_ = ( dx2_ * in.val_ - val_ * in.dx2_ ) / in.val_ / in.val_ ;
486  dx3_ = ( dx3_ * in.val_ - val_ * in.dx3_ ) / in.val_ / in.val_ ;
487  dx4_ = ( dx4_ * in.val_ - val_ * in.dx4_ ) / in.val_ / in.val_ ;
488  dx5_ = ( dx5_ * in.val_ - val_ * in.dx5_ ) / in.val_ / in.val_ ;
489  dx6_ = ( dx6_ * in.val_ - val_ * in.dx6_ ) / in.val_ / in.val_ ;
490  dx7_ = ( dx7_ * in.val_ - val_ * in.dx7_ ) / in.val_ / in.val_ ;
491  dx8_ = ( dx8_ * in.val_ - val_ * in.dx8_ ) / in.val_ / in.val_ ;
492  dx9_ = ( dx9_ * in.val_ - val_ * in.dx9_ ) / in.val_ / in.val_ ;
493  dx10_ = ( dx10_ * in.val_ - val_ * in.dx10_ ) / in.val_ / in.val_ ;
494  dx11_ = ( dx11_ * in.val_ - val_ * in.dx11_ ) / in.val_ / in.val_ ;
495  dx12_ = ( dx12_ * in.val_ - val_ * in.dx12_ ) / in.val_ / in.val_ ;
496  dx13_ = ( dx13_ * in.val_ - val_ * in.dx13_ ) / in.val_ / in.val_ ;
497  dx14_ = ( dx14_ * in.val_ - val_ * in.dx14_ ) / in.val_ / in.val_ ;
498  dx15_ = ( dx15_ * in.val_ - val_ * in.dx15_ ) / in.val_ / in.val_ ;
499  dx16_ = ( dx16_ * in.val_ - val_ * in.dx16_ ) / in.val_ / in.val_ ;
500  dx17_ = ( dx17_ * in.val_ - val_ * in.dx17_ ) / in.val_ / in.val_ ;
501  dx18_ = ( dx18_ * in.val_ - val_ * in.dx18_ ) / in.val_ / in.val_ ;
502  val_ /= in.val_;
503 
504  return *this;
505  }
506 
507  TinyFad<19,T> & operator += (const T & in){ val_ += in;
508 
509  return *this;
510  }
511  TinyFad<19,T> & operator -= (const T & in){ val_ -= in;
512 
513  return *this;
514  }
515  TinyFad<19,T> & operator *= (const T & in){
516  val_ *= in;
517 
518  dx0_ *= in;
519  dx1_ *= in;
520  dx2_ *= in;
521  dx3_ *= in;
522  dx4_ *= in;
523  dx5_ *= in;
524  dx6_ *= in;
525  dx7_ *= in;
526  dx8_ *= in;
527  dx9_ *= in;
528  dx10_ *= in;
529  dx11_ *= in;
530  dx12_ *= in;
531  dx13_ *= in;
532  dx14_ *= in;
533  dx15_ *= in;
534  dx16_ *= in;
535  dx17_ *= in;
536  dx18_ *= in;
537 
538  return *this;
539  }
540  TinyFad<19,T> & operator /= (const T & in){
541  if ( in == T(0.) ) error("TinyFad & TinyFad::operator /= (const T & in), dividing by 0");
542  val_ /= in;
543 
544  dx0_ /= in;
545  dx1_ /= in;
546  dx2_ /= in;
547  dx3_ /= in;
548  dx4_ /= in;
549  dx5_ /= in;
550  dx6_ /= in;
551  dx7_ /= in;
552  dx8_ /= in;
553  dx9_ /= in;
554  dx10_ /= in;
555  dx11_ /= in;
556  dx12_ /= in;
557  dx13_ /= in;
558  dx14_ /= in;
559  dx15_ /= in;
560  dx16_ /= in;
561  dx17_ /= in;
562  dx18_ /= in;
563 
564  return *this;
565  }
566 
568  TinyFad<19,T> tmp(*this);
569  tmp.val_++;
570  return tmp;
571  };
573  TinyFad<19,T> tmp(*this);
574  tmp.val_--;
575  return tmp;
576  };
578  return *this;
579  }
581  return *this;
582  }
583 };
584 
585 
586 template <class T> inline TinyFad<19,T> operator + (const TinyFad<19,T>& in)
587 {
588  return TinyFad<19,T>(in);
589 }
590 
591 template <class T> inline TinyFad<19,T> operator - (const TinyFad<19,T>& in)
592 {
594  tmp -= in;
595  return tmp;
596 }
597 
598 template <class L, class R> inline
600 operator +(const TinyFad<19,L>& un, const TinyFad<19,R>& deux) {
601 
602  typedef typename NumericalTraits<L,R>::promote value_type;
603 
604  No_Initialization nothing;
605  TinyFad<19,value_type> tmp( nothing );
606 
607  tmp.d0() = un.d0() + deux.d0();
608 
609  tmp.d1() = un.d1() + deux.d1();
610 
611  tmp.d2() = un.d2() + deux.d2();
612 
613  tmp.d3() = un.d3() + deux.d3();
614 
615  tmp.d4() = un.d4() + deux.d4();
616 
617  tmp.d5() = un.d5() + deux.d5();
618 
619  tmp.d6() = un.d6() + deux.d6();
620 
621  tmp.d7() = un.d7() + deux.d7();
622 
623  tmp.d8() = un.d8() + deux.d8();
624 
625  tmp.d9() = un.d9() + deux.d9();
626 
627  tmp.d10() = un.d10() + deux.d10();
628 
629  tmp.d11() = un.d11() + deux.d11();
630 
631  tmp.d12() = un.d12() + deux.d12();
632 
633  tmp.d13() = un.d13() + deux.d13();
634 
635  tmp.d14() = un.d14() + deux.d14();
636 
637  tmp.d15() = un.d15() + deux.d15();
638 
639  tmp.d16() = un.d16() + deux.d16();
640 
641  tmp.d17() = un.d17() + deux.d17();
642 
643  tmp.d18() = un.d18() + deux.d18();
644 
645  tmp.val() = un.val() + deux.val();
646 
647  return tmp;
648 }
649 
650 template <class L, class R> inline
652 operator +(const TinyFad<19,L>& un, const R& deux) {
653 
654  typedef typename NumericalTraits<L,R>::promote value_type;
655 
656  No_Initialization nothing;
657  TinyFad<19,value_type> tmp( nothing );
658 
659  tmp.d0() = un.d0();
660 
661  tmp.d1() = un.d1();
662 
663  tmp.d2() = un.d2();
664 
665  tmp.d3() = un.d3();
666 
667  tmp.d4() = un.d4();
668 
669  tmp.d5() = un.d5();
670 
671  tmp.d6() = un.d6();
672 
673  tmp.d7() = un.d7();
674 
675  tmp.d8() = un.d8();
676 
677  tmp.d9() = un.d9();
678 
679  tmp.d10() = un.d10();
680 
681  tmp.d11() = un.d11();
682 
683  tmp.d12() = un.d12();
684 
685  tmp.d13() = un.d13();
686 
687  tmp.d14() = un.d14();
688 
689  tmp.d15() = un.d15();
690 
691  tmp.d16() = un.d16();
692 
693  tmp.d17() = un.d17();
694 
695  tmp.d18() = un.d18();
696 
697  tmp.val() = un.val() + deux;
698 
699  return tmp;
700 }
701 
702 template <class L, class R> inline
704 operator +(const L& un, const TinyFad<19,R>& deux) {
705  return operator +(deux,un);
706 }
707 
708 template <class L, class R> inline
710 operator *(const TinyFad<19,L>& un, const TinyFad<19,R>& deux) {
711 
712  typedef typename NumericalTraits<L,R>::promote value_type;
713 
714  No_Initialization nothing;
715  TinyFad<19,value_type> tmp( nothing );
716 
717  tmp.d0() = un.d0()*deux.val() + un.val() * deux.d0();
718 
719  tmp.d1() = un.d1()*deux.val() + un.val() * deux.d1();
720 
721  tmp.d2() = un.d2()*deux.val() + un.val() * deux.d2();
722 
723  tmp.d3() = un.d3()*deux.val() + un.val() * deux.d3();
724 
725  tmp.d4() = un.d4()*deux.val() + un.val() * deux.d4();
726 
727  tmp.d5() = un.d5()*deux.val() + un.val() * deux.d5();
728 
729  tmp.d6() = un.d6()*deux.val() + un.val() * deux.d6();
730 
731  tmp.d7() = un.d7()*deux.val() + un.val() * deux.d7();
732 
733  tmp.d8() = un.d8()*deux.val() + un.val() * deux.d8();
734 
735  tmp.d9() = un.d9()*deux.val() + un.val() * deux.d9();
736 
737  tmp.d10() = un.d10()*deux.val() + un.val() * deux.d10();
738 
739  tmp.d11() = un.d11()*deux.val() + un.val() * deux.d11();
740 
741  tmp.d12() = un.d12()*deux.val() + un.val() * deux.d12();
742 
743  tmp.d13() = un.d13()*deux.val() + un.val() * deux.d13();
744 
745  tmp.d14() = un.d14()*deux.val() + un.val() * deux.d14();
746 
747  tmp.d15() = un.d15()*deux.val() + un.val() * deux.d15();
748 
749  tmp.d16() = un.d16()*deux.val() + un.val() * deux.d16();
750 
751  tmp.d17() = un.d17()*deux.val() + un.val() * deux.d17();
752 
753  tmp.d18() = un.d18()*deux.val() + un.val() * deux.d18();
754 
755  tmp.val() = un.val() * deux.val();
756 
757  return tmp;
758 }
759 
760 template <class L, class R> inline
762 operator *(const TinyFad<19,L>& un, const R& deux) {
763 
764  typedef typename NumericalTraits<L,R>::promote value_type;
765 
766  No_Initialization nothing;
767  TinyFad<19,value_type> tmp( nothing );
768 
769  tmp.d0() = un.d0()*deux;
770 
771  tmp.d1() = un.d1()*deux;
772 
773  tmp.d2() = un.d2()*deux;
774 
775  tmp.d3() = un.d3()*deux;
776 
777  tmp.d4() = un.d4()*deux;
778 
779  tmp.d5() = un.d5()*deux;
780 
781  tmp.d6() = un.d6()*deux;
782 
783  tmp.d7() = un.d7()*deux;
784 
785  tmp.d8() = un.d8()*deux;
786 
787  tmp.d9() = un.d9()*deux;
788 
789  tmp.d10() = un.d10()*deux;
790 
791  tmp.d11() = un.d11()*deux;
792 
793  tmp.d12() = un.d12()*deux;
794 
795  tmp.d13() = un.d13()*deux;
796 
797  tmp.d14() = un.d14()*deux;
798 
799  tmp.d15() = un.d15()*deux;
800 
801  tmp.d16() = un.d16()*deux;
802 
803  tmp.d17() = un.d17()*deux;
804 
805  tmp.d18() = un.d18()*deux;
806 
807  tmp.val() = un.val() * deux;
808 
809  return tmp;
810 }
811 
812 template <class L, class R> inline
814 operator *(const L& un, const TinyFad<19,R>& deux) {
815 
816  return operator *(deux,un);
817 }
818 
819 
820 template <class L, class R> inline
822 operator -(const TinyFad<19,L> & un, const TinyFad<19,R> & deux) {
823 
824  typedef typename NumericalTraits<L,R>::promote value_type;
825 
826  No_Initialization nothing;
827  TinyFad<19,value_type> tmp( nothing );
828 
829  tmp.d0() = un.d0() - deux.d0();
830 
831  tmp.d1() = un.d1() - deux.d1();
832 
833  tmp.d2() = un.d2() - deux.d2();
834 
835  tmp.d3() = un.d3() - deux.d3();
836 
837  tmp.d4() = un.d4() - deux.d4();
838 
839  tmp.d5() = un.d5() - deux.d5();
840 
841  tmp.d6() = un.d6() - deux.d6();
842 
843  tmp.d7() = un.d7() - deux.d7();
844 
845  tmp.d8() = un.d8() - deux.d8();
846 
847  tmp.d9() = un.d9() - deux.d9();
848 
849  tmp.d10() = un.d10() - deux.d10();
850 
851  tmp.d11() = un.d11() - deux.d11();
852 
853  tmp.d12() = un.d12() - deux.d12();
854 
855  tmp.d13() = un.d13() - deux.d13();
856 
857  tmp.d14() = un.d14() - deux.d14();
858 
859  tmp.d15() = un.d15() - deux.d15();
860 
861  tmp.d16() = un.d16() - deux.d16();
862 
863  tmp.d17() = un.d17() - deux.d17();
864 
865  tmp.d18() = un.d18() - deux.d18();
866 
867  tmp.val() = un.val() - deux.val();
868 
869  return tmp;
870 }
871 
872 template <class L, class R> inline
874 operator -(const L & un, const TinyFad<19,R> & deux) {
875 
876  typedef typename NumericalTraits<L,R>::promote value_type;
877 
878  No_Initialization nothing;
879  TinyFad<19,value_type> tmp( nothing );
880 
881  tmp.d0() -= deux.d0();
882 
883  tmp.d1() -= deux.d1();
884 
885  tmp.d2() -= deux.d2();
886 
887  tmp.d3() -= deux.d3();
888 
889  tmp.d4() -= deux.d4();
890 
891  tmp.d5() -= deux.d5();
892 
893  tmp.d6() -= deux.d6();
894 
895  tmp.d7() -= deux.d7();
896 
897  tmp.d8() -= deux.d8();
898 
899  tmp.d9() -= deux.d9();
900 
901  tmp.d10() -= deux.d10();
902 
903  tmp.d11() -= deux.d11();
904 
905  tmp.d12() -= deux.d12();
906 
907  tmp.d13() -= deux.d13();
908 
909  tmp.d14() -= deux.d14();
910 
911  tmp.d15() -= deux.d15();
912 
913  tmp.d16() -= deux.d16();
914 
915  tmp.d17() -= deux.d17();
916 
917  tmp.d18() -= deux.d18();
918 
919  tmp.val() = un - deux.val();
920 
921  return tmp;
922 }
923 
924 template <class L, class R> inline
926 operator -(const TinyFad<19,L> & un, const R & deux) {
927  typedef typename NumericalTraits<L,R>::promote value_type;
928 
929  No_Initialization nothing;
930  TinyFad<19,value_type> tmp( nothing );
931 
932  tmp.d0() = un.d0();
933 
934  tmp.d1() = un.d1();
935 
936  tmp.d2() = un.d2();
937 
938  tmp.d3() = un.d3();
939 
940  tmp.d4() = un.d4();
941 
942  tmp.d5() = un.d5();
943 
944  tmp.d6() = un.d6();
945 
946  tmp.d7() = un.d7();
947 
948  tmp.d8() = un.d8();
949 
950  tmp.d9() = un.d9();
951 
952  tmp.d10() = un.d10();
953 
954  tmp.d11() = un.d11();
955 
956  tmp.d12() = un.d12();
957 
958  tmp.d13() = un.d13();
959 
960  tmp.d14() = un.d14();
961 
962  tmp.d15() = un.d15();
963 
964  tmp.d16() = un.d16();
965 
966  tmp.d17() = un.d17();
967 
968  tmp.d18() = un.d18();
969 
970  tmp.val() = un.val() - deux;
971 
972  return tmp;
973 }
974 
975 template <class L, class R> inline
977 operator /(const TinyFad<19,L> & un, const TinyFad<19,R> & deux) {
978 
979  typedef typename NumericalTraits<L,R>::promote value_type;
980 
981  if (deux.val() == 0.) error("TinyFad & TinyFad::operator /(const TinyFad<19,L> & un, const TinyFad<19,R> & deux), dividing by 0");
982 
983  No_Initialization nothing;
984  TinyFad<19,value_type> tmp( nothing );
985  value_type dval = deux.val();
986 
987  tmp.d0() = ( un.d0()* deux.val() - un.val() * deux.d0() ) / dval / dval ;
988 
989  tmp.d1() = ( un.d1()* deux.val() - un.val() * deux.d1() ) / dval / dval ;
990 
991  tmp.d2() = ( un.d2()* deux.val() - un.val() * deux.d2() ) / dval / dval ;
992 
993  tmp.d3() = ( un.d3()* deux.val() - un.val() * deux.d3() ) / dval / dval ;
994 
995  tmp.d4() = ( un.d4()* deux.val() - un.val() * deux.d4() ) / dval / dval ;
996 
997  tmp.d5() = ( un.d5()* deux.val() - un.val() * deux.d5() ) / dval / dval ;
998 
999  tmp.d6() = ( un.d6()* deux.val() - un.val() * deux.d6() ) / dval / dval ;
1000 
1001  tmp.d7() = ( un.d7()* deux.val() - un.val() * deux.d7() ) / dval / dval ;
1002 
1003  tmp.d8() = ( un.d8()* deux.val() - un.val() * deux.d8() ) / dval / dval ;
1004 
1005  tmp.d9() = ( un.d9()* deux.val() - un.val() * deux.d9() ) / dval / dval ;
1006 
1007  tmp.d10() = ( un.d10()* deux.val() - un.val() * deux.d10() ) / dval / dval ;
1008 
1009  tmp.d11() = ( un.d11()* deux.val() - un.val() * deux.d11() ) / dval / dval ;
1010 
1011  tmp.d12() = ( un.d12()* deux.val() - un.val() * deux.d12() ) / dval / dval ;
1012 
1013  tmp.d13() = ( un.d13()* deux.val() - un.val() * deux.d13() ) / dval / dval ;
1014 
1015  tmp.d14() = ( un.d14()* deux.val() - un.val() * deux.d14() ) / dval / dval ;
1016 
1017  tmp.d15() = ( un.d15()* deux.val() - un.val() * deux.d15() ) / dval / dval ;
1018 
1019  tmp.d16() = ( un.d16()* deux.val() - un.val() * deux.d16() ) / dval / dval ;
1020 
1021  tmp.d17() = ( un.d17()* deux.val() - un.val() * deux.d17() ) / dval / dval ;
1022 
1023  tmp.d18() = ( un.d18()* deux.val() - un.val() * deux.d18() ) / dval / dval ;
1024 
1025  tmp.val() = un.val() / dval;
1026 
1027  return tmp;
1028 }
1029 
1030 template <class L, class R> inline
1032 operator /(const L & un, const TinyFad<19,R> & deux) {
1033 
1034  typedef typename NumericalTraits<L,R>::promote value_type;
1035 
1036  if (deux.val() == 0.) error("TinyFad & TinyFad::operator /(const L & un, const TinyFad<19,R> & deux), dividing by 0");
1037 
1038  No_Initialization nothing;
1039  TinyFad<19,value_type> tmp( nothing );
1040  value_type dval = deux.val();
1041 
1042  tmp.d0() = - un * deux.d0() / dval / dval ;
1043 
1044  tmp.d1() = - un * deux.d1() / dval / dval ;
1045 
1046  tmp.d2() = - un * deux.d2() / dval / dval ;
1047 
1048  tmp.d3() = - un * deux.d3() / dval / dval ;
1049 
1050  tmp.d4() = - un * deux.d4() / dval / dval ;
1051 
1052  tmp.d5() = - un * deux.d5() / dval / dval ;
1053 
1054  tmp.d6() = - un * deux.d6() / dval / dval ;
1055 
1056  tmp.d7() = - un * deux.d7() / dval / dval ;
1057 
1058  tmp.d8() = - un * deux.d8() / dval / dval ;
1059 
1060  tmp.d9() = - un * deux.d9() / dval / dval ;
1061 
1062  tmp.d10() = - un * deux.d10() / dval / dval ;
1063 
1064  tmp.d11() = - un * deux.d11() / dval / dval ;
1065 
1066  tmp.d12() = - un * deux.d12() / dval / dval ;
1067 
1068  tmp.d13() = - un * deux.d13() / dval / dval ;
1069 
1070  tmp.d14() = - un * deux.d14() / dval / dval ;
1071 
1072  tmp.d15() = - un * deux.d15() / dval / dval ;
1073 
1074  tmp.d16() = - un * deux.d16() / dval / dval ;
1075 
1076  tmp.d17() = - un * deux.d17() / dval / dval ;
1077 
1078  tmp.d18() = - un * deux.d18() / dval / dval ;
1079 
1080  tmp.val() = un / dval;
1081 
1082  return tmp;
1083 }
1084 
1085 template <class L, class R> inline
1087 operator /(const TinyFad<19,L> & un, const R & deux) {
1088 
1089  typedef typename NumericalTraits<L,R>::promote value_type;
1090 
1091  if (deux == 0.) error("TinyFad & TinyFad::operator /(const TinyFad<19,L> & un, const R & deux), dividing by 0");
1092 
1093  No_Initialization nothing;
1094  TinyFad<19,value_type> tmp( nothing );
1095 
1096  tmp.d0() = un.d0() / deux;
1097 
1098  tmp.d1() = un.d1() / deux;
1099 
1100  tmp.d2() = un.d2() / deux;
1101 
1102  tmp.d3() = un.d3() / deux;
1103 
1104  tmp.d4() = un.d4() / deux;
1105 
1106  tmp.d5() = un.d5() / deux;
1107 
1108  tmp.d6() = un.d6() / deux;
1109 
1110  tmp.d7() = un.d7() / deux;
1111 
1112  tmp.d8() = un.d8() / deux;
1113 
1114  tmp.d9() = un.d9() / deux;
1115 
1116  tmp.d10() = un.d10() / deux;
1117 
1118  tmp.d11() = un.d11() / deux;
1119 
1120  tmp.d12() = un.d12() / deux;
1121 
1122  tmp.d13() = un.d13() / deux;
1123 
1124  tmp.d14() = un.d14() / deux;
1125 
1126  tmp.d15() = un.d15() / deux;
1127 
1128  tmp.d16() = un.d16() / deux;
1129 
1130  tmp.d17() = un.d17() / deux;
1131 
1132  tmp.d18() = un.d18() / deux;
1133 
1134  tmp.val() = un.val() / deux;
1135 
1136  return tmp;
1137 }
1138 
1139 template <class T> TinyFad<19,T> exp (const TinyFad<19,T>& in)
1140 {
1141  TinyFad<19,T> tmp(exp(in.val()));
1142 
1143  tmp.d0() = in.d0()*exp(in.val());
1144  tmp.d1() = in.d1()*exp(in.val());
1145  tmp.d2() = in.d2()*exp(in.val());
1146  tmp.d3() = in.d3()*exp(in.val());
1147  tmp.d4() = in.d4()*exp(in.val());
1148  tmp.d5() = in.d5()*exp(in.val());
1149  tmp.d6() = in.d6()*exp(in.val());
1150  tmp.d7() = in.d7()*exp(in.val());
1151  tmp.d8() = in.d8()*exp(in.val());
1152  tmp.d9() = in.d9()*exp(in.val());
1153  tmp.d10() = in.d10()*exp(in.val());
1154  tmp.d11() = in.d11()*exp(in.val());
1155  tmp.d12() = in.d12()*exp(in.val());
1156  tmp.d13() = in.d13()*exp(in.val());
1157  tmp.d14() = in.d14()*exp(in.val());
1158  tmp.d15() = in.d15()*exp(in.val());
1159  tmp.d16() = in.d16()*exp(in.val());
1160  tmp.d17() = in.d17()*exp(in.val());
1161  tmp.d18() = in.d18()*exp(in.val());
1162 
1163  return tmp;
1164 }
1165 
1166 template <class T> TinyFad<19,T> log (const TinyFad<19,T>& in)
1167 {
1168  if ( in.val() <= 0) error("TinyFad log (const TinyFad& in) : zero or negative value");
1169  TinyFad<19,T> tmp(log(in.val()));
1170 
1171  tmp.d0() = in.d0() / in.val();
1172  tmp.d1() = in.d1() / in.val();
1173  tmp.d2() = in.d2() / in.val();
1174  tmp.d3() = in.d3() / in.val();
1175  tmp.d4() = in.d4() / in.val();
1176  tmp.d5() = in.d5() / in.val();
1177  tmp.d6() = in.d6() / in.val();
1178  tmp.d7() = in.d7() / in.val();
1179  tmp.d8() = in.d8() / in.val();
1180  tmp.d9() = in.d9() / in.val();
1181  tmp.d10() = in.d10() / in.val();
1182  tmp.d11() = in.d11() / in.val();
1183  tmp.d12() = in.d12() / in.val();
1184  tmp.d13() = in.d13() / in.val();
1185  tmp.d14() = in.d14() / in.val();
1186  tmp.d15() = in.d15() / in.val();
1187  tmp.d16() = in.d16() / in.val();
1188  tmp.d17() = in.d17() / in.val();
1189  tmp.d18() = in.d18() / in.val();
1190 
1191  return tmp;
1192 }
1193 
1194 template <class T> TinyFad<19,T> sqrt (const TinyFad<19,T>& in)
1195 {
1196  if ( in.val() < 0. ) error("TinyFad<19,T> sqrt (const TinyFad& in) : negative value");
1197  TinyFad<19,T> tmp(sqrt(in.val()));
1198 
1199  bool test=true;
1200  if ( in.val() == T(0.) ){
1201  if ( in.d0() != T(0.) ) test = false;
1202 
1203  if ( in.d1() != T(0.) ) test = false;
1204 
1205  if ( in.d2() != T(0.) ) test = false;
1206 
1207  if ( in.d3() != T(0.) ) test = false;
1208 
1209  if ( in.d4() != T(0.) ) test = false;
1210 
1211  if ( in.d5() != T(0.) ) test = false;
1212 
1213  if ( in.d6() != T(0.) ) test = false;
1214 
1215  if ( in.d7() != T(0.) ) test = false;
1216 
1217  if ( in.d8() != T(0.) ) test = false;
1218 
1219  if ( in.d9() != T(0.) ) test = false;
1220 
1221  if ( in.d10() != T(0.) ) test = false;
1222 
1223  if ( in.d11() != T(0.) ) test = false;
1224 
1225  if ( in.d12() != T(0.) ) test = false;
1226 
1227  if ( in.d13() != T(0.) ) test = false;
1228 
1229  if ( in.d14() != T(0.) ) test = false;
1230 
1231  if ( in.d15() != T(0.) ) test = false;
1232 
1233  if ( in.d16() != T(0.) ) test = false;
1234 
1235  if ( in.d17() != T(0.) ) test = false;
1236 
1237  if ( in.d18() != T(0.) ) test = false;
1238 
1239  if ( !test )
1240  error("TinyFad<19,T> sqrt (const TinyFad& in) : null value");
1241  }
1242  else {
1243  tmp.d0() = in.d0() / sqrt(in.val()) / 2.;
1244  tmp.d1() = in.d1() / sqrt(in.val()) / 2.;
1245  tmp.d2() = in.d2() / sqrt(in.val()) / 2.;
1246  tmp.d3() = in.d3() / sqrt(in.val()) / 2.;
1247  tmp.d4() = in.d4() / sqrt(in.val()) / 2.;
1248  tmp.d5() = in.d5() / sqrt(in.val()) / 2.;
1249  tmp.d6() = in.d6() / sqrt(in.val()) / 2.;
1250  tmp.d7() = in.d7() / sqrt(in.val()) / 2.;
1251  tmp.d8() = in.d8() / sqrt(in.val()) / 2.;
1252  tmp.d9() = in.d9() / sqrt(in.val()) / 2.;
1253  tmp.d10() = in.d10() / sqrt(in.val()) / 2.;
1254  tmp.d11() = in.d11() / sqrt(in.val()) / 2.;
1255  tmp.d12() = in.d12() / sqrt(in.val()) / 2.;
1256  tmp.d13() = in.d13() / sqrt(in.val()) / 2.;
1257  tmp.d14() = in.d14() / sqrt(in.val()) / 2.;
1258  tmp.d15() = in.d15() / sqrt(in.val()) / 2.;
1259  tmp.d16() = in.d16() / sqrt(in.val()) / 2.;
1260  tmp.d17() = in.d17() / sqrt(in.val()) / 2.;
1261  tmp.d18() = in.d18() / sqrt(in.val()) / 2.;
1262  }
1263 
1264  return tmp;
1265 }
1266 
1267 template <class T> TinyFad<19,T> sin (const TinyFad<19,T>& in)
1268 {
1269  TinyFad<19,T> tmp( sin(in.val()) );
1270 
1271  tmp.d0() = in.d0() * cos( in.val() );
1272  tmp.d1() = in.d1() * cos( in.val() );
1273  tmp.d2() = in.d2() * cos( in.val() );
1274  tmp.d3() = in.d3() * cos( in.val() );
1275  tmp.d4() = in.d4() * cos( in.val() );
1276  tmp.d5() = in.d5() * cos( in.val() );
1277  tmp.d6() = in.d6() * cos( in.val() );
1278  tmp.d7() = in.d7() * cos( in.val() );
1279  tmp.d8() = in.d8() * cos( in.val() );
1280  tmp.d9() = in.d9() * cos( in.val() );
1281  tmp.d10() = in.d10() * cos( in.val() );
1282  tmp.d11() = in.d11() * cos( in.val() );
1283  tmp.d12() = in.d12() * cos( in.val() );
1284  tmp.d13() = in.d13() * cos( in.val() );
1285  tmp.d14() = in.d14() * cos( in.val() );
1286  tmp.d15() = in.d15() * cos( in.val() );
1287  tmp.d16() = in.d16() * cos( in.val() );
1288  tmp.d17() = in.d17() * cos( in.val() );
1289  tmp.d18() = in.d18() * cos( in.val() );
1290 
1291  return tmp;
1292 }
1293 
1294 template <class T> TinyFad<19,T> cos (const TinyFad<19,T>& in)
1295 {
1296  TinyFad<19,T> tmp(cos(in.val()));
1297 
1298  tmp.d0() = - in.d0() * sin( in.val() );
1299  tmp.d1() = - in.d1() * sin( in.val() );
1300  tmp.d2() = - in.d2() * sin( in.val() );
1301  tmp.d3() = - in.d3() * sin( in.val() );
1302  tmp.d4() = - in.d4() * sin( in.val() );
1303  tmp.d5() = - in.d5() * sin( in.val() );
1304  tmp.d6() = - in.d6() * sin( in.val() );
1305  tmp.d7() = - in.d7() * sin( in.val() );
1306  tmp.d8() = - in.d8() * sin( in.val() );
1307  tmp.d9() = - in.d9() * sin( in.val() );
1308  tmp.d10() = - in.d10() * sin( in.val() );
1309  tmp.d11() = - in.d11() * sin( in.val() );
1310  tmp.d12() = - in.d12() * sin( in.val() );
1311  tmp.d13() = - in.d13() * sin( in.val() );
1312  tmp.d14() = - in.d14() * sin( in.val() );
1313  tmp.d15() = - in.d15() * sin( in.val() );
1314  tmp.d16() = - in.d16() * sin( in.val() );
1315  tmp.d17() = - in.d17() * sin( in.val() );
1316  tmp.d18() = - in.d18() * sin( in.val() );
1317 
1318  return tmp;
1319 }
1320 
1321 template <class T> TinyFad<19,T> tan (const TinyFad<19,T>& in)
1322 {
1323  if ( in.val() == 0) error("TinyFad tan (const TinyFad& in) undiefined in 0.");
1324  TinyFad<19,T> tmp(tan(in.val()));
1325 
1326  T cosinus = cos(in.val());
1327  tmp.d0() = in.d0() / cosinus / cosinus;
1328  tmp.d1() = in.d1() / cosinus / cosinus;
1329  tmp.d2() = in.d2() / cosinus / cosinus;
1330  tmp.d3() = in.d3() / cosinus / cosinus;
1331  tmp.d4() = in.d4() / cosinus / cosinus;
1332  tmp.d5() = in.d5() / cosinus / cosinus;
1333  tmp.d6() = in.d6() / cosinus / cosinus;
1334  tmp.d7() = in.d7() / cosinus / cosinus;
1335  tmp.d8() = in.d8() / cosinus / cosinus;
1336  tmp.d9() = in.d9() / cosinus / cosinus;
1337  tmp.d10() = in.d10() / cosinus / cosinus;
1338  tmp.d11() = in.d11() / cosinus / cosinus;
1339  tmp.d12() = in.d12() / cosinus / cosinus;
1340  tmp.d13() = in.d13() / cosinus / cosinus;
1341  tmp.d14() = in.d14() / cosinus / cosinus;
1342  tmp.d15() = in.d15() / cosinus / cosinus;
1343  tmp.d16() = in.d16() / cosinus / cosinus;
1344  tmp.d17() = in.d17() / cosinus / cosinus;
1345  tmp.d18() = in.d18() / cosinus / cosinus;
1346 
1347  return tmp;
1348 }
1349 
1350 template <class T> TinyFad<19,T> pow (const TinyFad<19,T>& in, double e)
1351 {
1352  TinyFad<19,T> tmp(pow(in.val(), e));
1353 
1354  tmp.d0() = e*in.d0()*pow(in.val(), e-1);
1355  tmp.d1() = e*in.d1()*pow(in.val(), e-1);
1356  tmp.d2() = e*in.d2()*pow(in.val(), e-1);
1357  tmp.d3() = e*in.d3()*pow(in.val(), e-1);
1358  tmp.d4() = e*in.d4()*pow(in.val(), e-1);
1359  tmp.d5() = e*in.d5()*pow(in.val(), e-1);
1360  tmp.d6() = e*in.d6()*pow(in.val(), e-1);
1361  tmp.d7() = e*in.d7()*pow(in.val(), e-1);
1362  tmp.d8() = e*in.d8()*pow(in.val(), e-1);
1363  tmp.d9() = e*in.d9()*pow(in.val(), e-1);
1364  tmp.d10() = e*in.d10()*pow(in.val(), e-1);
1365  tmp.d11() = e*in.d11()*pow(in.val(), e-1);
1366  tmp.d12() = e*in.d12()*pow(in.val(), e-1);
1367  tmp.d13() = e*in.d13()*pow(in.val(), e-1);
1368  tmp.d14() = e*in.d14()*pow(in.val(), e-1);
1369  tmp.d15() = e*in.d15()*pow(in.val(), e-1);
1370  tmp.d16() = e*in.d16()*pow(in.val(), e-1);
1371  tmp.d17() = e*in.d17()*pow(in.val(), e-1);
1372  tmp.d18() = e*in.d18()*pow(in.val(), e-1);
1373 
1374  return tmp;
1375 }
1376 
1377 template <class T> TinyFad<19,T> pow (const TinyFad<19,T>& un, const TinyFad<19,T>& deux)
1378 {
1379  if (un.val() == 0) error("TinyFad pow (const TinyFad& un, const TinyFad& deux), un = 0. ");
1380  TinyFad<19,T> tmp(pow(un.val(), deux.val()));
1381 
1382  tmp.d0() = deux.d0() * log(un.val()) * pow(un.val(), deux.val())
1383  + deux.val() * un.d0() * pow(un.val(), deux.val()-1);
1384  tmp.d1() = deux.d1() * log(un.val()) * pow(un.val(), deux.val())
1385  + deux.val() * un.d1() * pow(un.val(), deux.val()-1);
1386  tmp.d2() = deux.d2() * log(un.val()) * pow(un.val(), deux.val())
1387  + deux.val() * un.d2() * pow(un.val(), deux.val()-1);
1388  tmp.d3() = deux.d3() * log(un.val()) * pow(un.val(), deux.val())
1389  + deux.val() * un.d3() * pow(un.val(), deux.val()-1);
1390  tmp.d4() = deux.d4() * log(un.val()) * pow(un.val(), deux.val())
1391  + deux.val() * un.d4() * pow(un.val(), deux.val()-1);
1392  tmp.d5() = deux.d5() * log(un.val()) * pow(un.val(), deux.val())
1393  + deux.val() * un.d5() * pow(un.val(), deux.val()-1);
1394  tmp.d6() = deux.d6() * log(un.val()) * pow(un.val(), deux.val())
1395  + deux.val() * un.d6() * pow(un.val(), deux.val()-1);
1396  tmp.d7() = deux.d7() * log(un.val()) * pow(un.val(), deux.val())
1397  + deux.val() * un.d7() * pow(un.val(), deux.val()-1);
1398  tmp.d8() = deux.d8() * log(un.val()) * pow(un.val(), deux.val())
1399  + deux.val() * un.d8() * pow(un.val(), deux.val()-1);
1400  tmp.d9() = deux.d9() * log(un.val()) * pow(un.val(), deux.val())
1401  + deux.val() * un.d9() * pow(un.val(), deux.val()-1);
1402  tmp.d10() = deux.d10() * log(un.val()) * pow(un.val(), deux.val())
1403  + deux.val() * un.d10() * pow(un.val(), deux.val()-1);
1404  tmp.d11() = deux.d11() * log(un.val()) * pow(un.val(), deux.val())
1405  + deux.val() * un.d11() * pow(un.val(), deux.val()-1);
1406  tmp.d12() = deux.d12() * log(un.val()) * pow(un.val(), deux.val())
1407  + deux.val() * un.d12() * pow(un.val(), deux.val()-1);
1408  tmp.d13() = deux.d13() * log(un.val()) * pow(un.val(), deux.val())
1409  + deux.val() * un.d13() * pow(un.val(), deux.val()-1);
1410  tmp.d14() = deux.d14() * log(un.val()) * pow(un.val(), deux.val())
1411  + deux.val() * un.d14() * pow(un.val(), deux.val()-1);
1412  tmp.d15() = deux.d15() * log(un.val()) * pow(un.val(), deux.val())
1413  + deux.val() * un.d15() * pow(un.val(), deux.val()-1);
1414  tmp.d16() = deux.d16() * log(un.val()) * pow(un.val(), deux.val())
1415  + deux.val() * un.d16() * pow(un.val(), deux.val()-1);
1416  tmp.d17() = deux.d17() * log(un.val()) * pow(un.val(), deux.val())
1417  + deux.val() * un.d17() * pow(un.val(), deux.val()-1);
1418  tmp.d18() = deux.d18() * log(un.val()) * pow(un.val(), deux.val())
1419  + deux.val() * un.d18() * pow(un.val(), deux.val()-1);
1420 
1421  return tmp;
1422 }
1423 
1424 template <class T> TinyFad<19,T> pow (const TinyFad<19,T>& in, const int e)
1425 {
1426  TinyFad<19,T> tmp( pow((double)in.val(), (double)e) );
1427 
1428  tmp.d0() = e*in.d0()*pow((double)in.val(), (double)e-1);
1429  tmp.d1() = e*in.d1()*pow((double)in.val(), (double)e-1);
1430  tmp.d2() = e*in.d2()*pow((double)in.val(), (double)e-1);
1431  tmp.d3() = e*in.d3()*pow((double)in.val(), (double)e-1);
1432  tmp.d4() = e*in.d4()*pow((double)in.val(), (double)e-1);
1433  tmp.d5() = e*in.d5()*pow((double)in.val(), (double)e-1);
1434  tmp.d6() = e*in.d6()*pow((double)in.val(), (double)e-1);
1435  tmp.d7() = e*in.d7()*pow((double)in.val(), (double)e-1);
1436  tmp.d8() = e*in.d8()*pow((double)in.val(), (double)e-1);
1437  tmp.d9() = e*in.d9()*pow((double)in.val(), (double)e-1);
1438  tmp.d10() = e*in.d10()*pow((double)in.val(), (double)e-1);
1439  tmp.d11() = e*in.d11()*pow((double)in.val(), (double)e-1);
1440  tmp.d12() = e*in.d12()*pow((double)in.val(), (double)e-1);
1441  tmp.d13() = e*in.d13()*pow((double)in.val(), (double)e-1);
1442  tmp.d14() = e*in.d14()*pow((double)in.val(), (double)e-1);
1443  tmp.d15() = e*in.d15()*pow((double)in.val(), (double)e-1);
1444  tmp.d16() = e*in.d16()*pow((double)in.val(), (double)e-1);
1445  tmp.d17() = e*in.d17()*pow((double)in.val(), (double)e-1);
1446  tmp.d18() = e*in.d18()*pow((double)in.val(), (double)e-1);
1447 
1448  return tmp;
1449 }
1450 
1451 template <class T> TinyFad<19,T> abs (const TinyFad<19,T>& in)
1452 {
1453  int sign = in.val() > 0? 1:0;
1454 
1455  if (sign) return in;
1456  else return (-in);
1457 }
1458 
1459 template <class T> std::ostream& operator << (std::ostream& os, const TinyFad<19,T>& a)
1460 {
1461  os.setf(std::ios::fixed,std::ios::scientific);
1462  os.width(12);
1463  os << a.val() << " [";
1464 
1465  os.width(12);
1466  os << a.d0();
1467  os.width(12);
1468  os << a.d1();
1469  os.width(12);
1470  os << a.d2();
1471  os.width(12);
1472  os << a.d3();
1473  os.width(12);
1474  os << a.d4();
1475  os.width(12);
1476  os << a.d5();
1477  os.width(12);
1478  os << a.d6();
1479  os.width(12);
1480  os << a.d7();
1481  os.width(12);
1482  os << a.d8();
1483  os.width(12);
1484  os << a.d9();
1485  os.width(12);
1486  os << a.d10();
1487  os.width(12);
1488  os << a.d11();
1489  os.width(12);
1490  os << a.d12();
1491  os.width(12);
1492  os << a.d13();
1493  os.width(12);
1494  os << a.d14();
1495  os.width(12);
1496  os << a.d15();
1497  os.width(12);
1498  os << a.d16();
1499  os.width(12);
1500  os << a.d17();
1501  os.width(12);
1502  os << a.d18();
1503 
1504  os << "]";
1505 
1506  return os;
1507 }
1508 
1509 
1510 #endif
const T & d15() const
TinyFad< 19, typename NumericalTraits< L, R >::promote > operator/(const TinyFad< 19, L > &un, const TinyFad< 19, R > &deux)
TinyFad(const T &in)
const T & d13() const
TinyFad< 19, T > pow(const TinyFad< 19, T > &in, double e)
TinyFad< Num, T > & operator-=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:233
const T & d6() const
TinyFad< 19, T > operator++(int)
Definition: test.py:1
const T & d5() const
TinyFad< 19, T > operator+(const TinyFad< 19, T > &in)
AutoPointerMutexArrayInit tmp
const T & d14() const
const T & d10() const
const T & d11() const
T val_
Definition: tinyfad.h:47
const T & d2() const
void error(char *string)
Definition: testShape.cc:7
TinyFad< 19, typename NumericalTraits< L, R >::promote > operator*(const TinyFad< 19, L > &un, const TinyFad< 19, R > &deux)
TinyFad< 19, T > sqrt(const TinyFad< 19, T > &in)
const T & d12() const
TinyFad< 19, T > log(const TinyFad< 19, T > &in)
const T & d1() const
TinyFad< Num, T > & operator=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:189
TinyFad< 19, T > abs(const TinyFad< 19, T > &in)
const T & d18() const
TinyFad< 19, T > cos(const TinyFad< 19, T > &in)
const T & dx(int i) const
TinyFad< 19, T > tan(const TinyFad< 19, T > &in)
const T & d3() const
TinyFad< Num, T > & operator+=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:219
T value_type
Definition: tinyfad.h:53
TinyFad< 19, T > operator-(const TinyFad< 19, T > &in)
TinyFad< Num, T > & operator*=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:247
TinyFad< 19, T > & operator--()
TinyFad(const No_Initialization &)
const T & d17() const
const T & d7() const
const T & val() const
TinyFad< 19, T > exp(const TinyFad< 19, T > &in)
TinyFad< 19, T > & operator++()
void diff(const size_t ith, const size_t sz)
TinyFad< 19, T > sin(const TinyFad< 19, T > &in)
TinyFad< 19, T > operator--(int)
TinyFad< Num, T > & operator/=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:261
const T & d16() const
TinyFad(const TinyFad< 19, T > &in)
const T & d9() const
const T & d(int i) const
TinyFad(const T &ind, const int ini)
const T & d4() const
const T & d0() const
const T & d8() const
const T & val() const
Definition: tinyfad.h:72