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