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