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