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