13 #ifndef eli_mutil_ad_dual_math_hpp
14 #define eli_mutil_ad_dual_math_hpp
16 #include "eli/code_eli.hpp"
30 template <
typename T__>
33 static T__
f(
const T__ &t) {
return std::sin(t);}
34 static T__
fp(
const T__ &t) {
return std::cos(t);}
35 static T__
fp(
const T__ &t,
const size_t &n)
76 template <
typename T__>
79 static T__
f(
const T__ &t) {
return std::cos(t);}
80 static T__
fp(
const T__ &t) {
return -std::sin(t);}
81 static T__
fp(
const T__ &t,
const size_t &n)
122 template <
typename T__>
125 static T__
f(
const T__ &t) {
return std::tan(t);}
126 static T__
fp(
const T__ &t) {T__ v(std::cos(t));
return 1/v/v;}
127 static T__
fp(
const T__ &t,
const size_t &n)
166 template <
typename T__>
169 static T__
f(
const T__ &t) {
return std::asin(t);}
170 static T__
fp(
const T__ &t) {
return 1/std::sqrt(1-t*t);}
171 static T__
fp(
const T__ &t,
const size_t &n)
209 template <
typename T__>
212 static T__
f(
const T__ &t) {
return std::acos(t);}
213 static T__
fp(
const T__ &t) {
return -1/std::sqrt(1-t*t);}
214 static T__
fp(
const T__ &t,
const size_t &n)
252 template <
typename T__>
255 static T__
f(
const T__ &t) {
return std::atan(t);}
256 static T__
fp(
const T__ &t) {
return 1/(1+t*t);}
257 static T__
fp(
const T__ &t,
const size_t &n)
295 template <
typename T__>
298 static T__
f(
const T__ &y,
const T__ &x) {
return std::atan2(y, x);}
299 static T__
fx(
const T__ &y,
const T__ &x) {
return -y/(x*x+y*y);}
300 static T__
fy(
const T__ &y,
const T__ &x) {
return x/(x*x+y*y);}
301 static T__
fxy(
const T__ &y,
const T__ &x,
const size_t &nx,
const size_t &ny)
371 template <
typename T__>
374 static T__
f(
const T__ &t) {
return std::sinh(t);}
375 static T__
fp(
const T__ &t) {
return std::cosh(t);}
376 static T__
fp(
const T__ &t,
const size_t &n)
397 template <
typename T__>
400 static T__
f(
const T__ &t) {
return std::cosh(t);}
401 static T__
fp(
const T__ &t) {
return std::sinh(t);}
402 static T__
fp(
const T__ &t,
const size_t &n)
423 template <
typename T__>
426 static T__
f(
const T__ &t) {
return std::tanh(t);}
427 static T__
fp(
const T__ &t) {T__ v(std::cosh(t));
return 1/v/v;}
428 static T__
fp(
const T__ &t,
const size_t &n)
467 template <
typename T__>
470 static T__
f(
const T__ &t) {
return std::asinh(t);}
471 static T__
fp(
const T__ &t) {
return 1/std::sqrt(1+t*t);}
472 static T__
fp(
const T__ &t,
const size_t &n)
510 template <
typename T__>
513 static T__
f(
const T__ &t) {
return std::acosh(t);}
514 static T__
fp(
const T__ &t) {
return 1/std::sqrt(t*t-1);}
515 static T__
fp(
const T__ &t,
const size_t &n)
553 template <
typename T__>
556 static T__
f(
const T__ &t) {
return std::atanh(t);}
557 static T__
fp(
const T__ &t) {
return 1/(1-t*t);}
558 static T__
fp(
const T__ &t,
const size_t &n)
596 template <
typename T__>
599 static T__
f(
const T__ &t) {
return std::exp(t);}
600 static T__
fp(
const T__ &t) {
return std::exp(t);}
601 static T__
fp(
const T__ &t,
const size_t &) {
return std::exp(t);}
616 template <
typename T__>
619 static T__
f(
const T__ &t) {
return std::expm1(t);}
620 static T__
fp(
const T__ &t) {
return std::exp(t);}
621 static T__
fp(
const T__ &t,
const size_t &) {
return std::exp(t);}
636 template <
typename T__>
639 static T__
f(
const T__ &t) {
return std::exp2(t);}
640 static T__
fp(
const T__ &t) {
return std::log(static_cast<T__>(2))*std::exp2(t);}
641 static T__
fp(
const T__ &t,
const size_t &n)
657 return std::pow(std::log(static_cast<T__>(2)),n-1)*std::exp2(t);
675 template <
typename T__>
678 static T__
f(
const T__ &t) {
return std::log(t);}
679 static T__
fp(
const T__ &t) {
return 1/t;}
680 static T__
fp(
const T__ &t,
const size_t &n)
697 for (
size_t i=2; i<=n; ++i)
717 template <
typename T__>
720 static T__
f(
const T__ &t) {
return std::log10(t);}
721 static T__
fp(
const T__ &t) {
return 1/t/std::log(static_cast<T__>(10));}
722 static T__
fp(
const T__ &t,
const size_t &n)
738 T__ val(
fp(t)/std::log(static_cast<T__>(10)));
739 for (
size_t i=2; i<=n; ++i)
759 template <
typename T__>
762 static T__
f(
const T__ &t) {
return std::log2(t);}
763 static T__
fp(
const T__ &t) {
return 1/t/std::log(static_cast<T__>(2));}
764 static T__
fp(
const T__ &t,
const size_t &n)
780 T__ val(
fp(t)/std::log(static_cast<T__>(2)));
781 for (
size_t i=2; i<=n; ++i)
801 template <
typename T__>
804 static T__
f(
const T__ &t) {
return std::log1p(t);}
805 static T__
fp(
const T__ &t) {
return 1/(1+t);}
806 static T__
fp(
const T__ &t,
const size_t &n)
823 for (
size_t i=2; i<=n; ++i)
843 template <
typename T__>
846 static T__
f(
const T__ &t) {
return std::sqrt(t);}
847 static T__
fp(
const T__ &t) {
return static_cast<T__
>(0.5)/std::sqrt(t);}
848 static T__
fp(
const T__ &t,
const size_t &n)
865 for (
size_t i=1; i<n; ++i)
886 template <
typename T__>
889 static T__
f(
const T__ &t) {
return std::cbrt(t);}
890 static T__
fp(
const T__ &t) {
return (static_cast<T__>(1)/static_cast<T__>(3))/std::cbrt(t*t);}
891 static T__
fp(
const T__ &t,
const size_t &n)
908 for (
size_t i=1; i<n; ++i)
929 template <
typename T__>
932 static T__
f(
const T__ &t) {
return std::abs(t);}
933 static T__
fp(
const T__ &t) {
return (t<0)?(
static_cast<T__
>(-1)):(
static_cast<T__
>(1));}
934 static T__
fp(
const T__ &t,
const size_t &n)
968 template <
typename T__>
971 static T__
f(
const T__ &t) {
return std::ceil(t);}
972 static T__
fp(
const T__ &) {
return 0;}
973 static T__
fp(
const T__ &t,
const size_t &n)
994 template <
typename T__>
997 static T__
f(
const T__ &t) {
return std::floor(t);}
998 static T__
fp(
const T__ &) {
return 0;}
999 static T__
fp(
const T__ &t,
const size_t &n)
1020 template <
typename T__>
1023 static T__
f(
const T__ &t) {
return std::erf(t);}
1024 static T__
fp(
const T__ &t)
1028 static T__
fp(
const T__ &t,
const size_t &n)
1064 template <
typename T__>
1067 static T__
f(
const T__ &t) {
return std::erfc(t);}
1068 static T__
fp(
const T__ &t)
1072 static T__
fp(
const T__ &t,
const size_t &n)
Definition: dual_math.hpp:31
static T__ f(const T__ &t)
Definition: dual_math.hpp:125
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:806
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:973
Definition: dual_math.hpp:253
static T__ fp(const T__ &t)
Definition: dual_math.hpp:514
Definition: dual_math.hpp:844
Definition: dual_math.hpp:77
Definition: dual_math.hpp:597
static T__ f(const T__ &t)
Definition: dual_math.hpp:846
static T__ fp(const T__ &t)
Definition: dual_math.hpp:1024
static T__ fp(const T__ &t)
Definition: dual_math.hpp:620
static T__ fp(const T__ &t)
Definition: dual_math.hpp:256
static T__ fp(const T__ &t)
Definition: dual_math.hpp:80
Definition: dual_math.hpp:676
static T__ f(const T__ &t)
Definition: dual_math.hpp:762
static T__ fp(const T__ &t)
Definition: dual_math.hpp:640
Definition: dual_math.hpp:637
Definition: dual_math.hpp:372
Definition: dual_math.hpp:123
static T__ f(const T__ &t)
Definition: dual_math.hpp:720
static T__ fp(const T__ &t)
Definition: dual_math.hpp:679
Definition: dual_math.hpp:1065
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:848
static T__ fp(const T__ &t)
Definition: dual_math.hpp:401
static T__ fy(const T__ &y, const T__ &x)
Definition: dual_math.hpp:300
static T__ fp(const T__ &t, const size_t &)
Definition: dual_math.hpp:601
static T__ fp(const T__ &t)
Definition: dual_math.hpp:34
static T__ fx(const T__ &y, const T__ &x)
Definition: dual_math.hpp:299
static T__ fp(const T__ &t)
Definition: dual_math.hpp:721
static T__ f(const T__ &t)
Definition: dual_math.hpp:619
static T__ f(const T__ &t)
Definition: dual_math.hpp:212
Definition: dual_math.hpp:930
Definition: dual_math.hpp:1021
Definition: dual_math.hpp:995
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:1028
Definition: dual_math.hpp:398
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:722
Definition: dual_math.hpp:718
static T__ fp(const T__ &)
Definition: dual_math.hpp:998
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:402
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:934
static T__ f(const T__ &t)
Definition: dual_math.hpp:971
static T__ fp(const T__ &t)
Definition: dual_math.hpp:427
static T__ f(const T__ &t)
Definition: dual_math.hpp:169
Definition: dual_math.hpp:617
static T__ f(const T__ &t)
Definition: dual_math.hpp:997
static T__ fp(const T__ &t)
Definition: dual_math.hpp:1068
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:515
Definition: dual_math.hpp:760
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:472
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:680
static T__ f(const T__ &t)
Definition: dual_math.hpp:804
Definition: dual_math.hpp:468
static T__ f(const T__ &t)
Definition: dual_math.hpp:400
static T__ f(const T__ &t)
Definition: dual_math.hpp:255
Definition: dual_math.hpp:210
static T__ f(const T__ &t)
Definition: dual_math.hpp:932
Definition: dual_math.hpp:424
Definition: dual_math.hpp:511
static T__ f(const T__ &t)
Definition: dual_math.hpp:678
static T__ f(const T__ &t)
Definition: dual_math.hpp:374
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:641
static T__ fp(const T__ &t)
Definition: dual_math.hpp:375
static T__ f(const T__ &y, const T__ &x)
Definition: dual_math.hpp:298
static T__ fp(const T__ &t)
Definition: dual_math.hpp:763
static T__ f(const T__ &t)
Definition: dual_math.hpp:513
static T__ fp(const T__ &t)
Definition: dual_math.hpp:170
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:558
static T__ f(const T__ &t)
Definition: dual_math.hpp:33
static T__ fp(const T__ &t)
Definition: dual_math.hpp:933
static T__ f(const T__ &t)
Definition: dual_math.hpp:639
static T__ fp(const T__ &t)
Definition: dual_math.hpp:213
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:891
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:428
static T__ fp(const T__ &t, const size_t &)
Definition: dual_math.hpp:621
static T__ f(const T__ &t)
Definition: dual_math.hpp:599
static T__ fp(const T__ &t)
Definition: dual_math.hpp:890
static T__ fxy(const T__ &y, const T__ &x, const size_t &nx, const size_t &ny)
Definition: dual_math.hpp:301
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:171
static T__ f(const T__ &t)
Definition: dual_math.hpp:1023
static T__ fp(const T__ &t)
Definition: dual_math.hpp:126
Definition: dual_math.hpp:167
static T__ f(const T__ &t)
Definition: dual_math.hpp:426
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:764
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:35
static T__ f(const T__ &t)
Definition: dual_math.hpp:889
static T__ fp(const T__ &t)
Definition: dual_math.hpp:471
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:127
static T__ f(const T__ &t)
Definition: dual_math.hpp:1067
static T__ f(const T__ &t)
Definition: dual_math.hpp:556
Definition: dual_math.hpp:296
Definition: dual_math.hpp:887
static T__ f(const T__ &t)
Definition: dual_math.hpp:470
static T__ fp(const T__ &t)
Definition: dual_math.hpp:600
Definition: dual_math.hpp:554
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:81
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:999
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:214
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:257
static T__ fp(const T__ &)
Definition: dual_math.hpp:972
static T__ f(const T__ &t)
Definition: dual_math.hpp:79
static T__ fp(const T__ &t)
Definition: dual_math.hpp:805
static T__ fp(const T__ &t)
Definition: dual_math.hpp:847
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:1072
static T__ fp(const T__ &t)
Definition: dual_math.hpp:557
static T__ fp(const T__ &t, const size_t &n)
Definition: dual_math.hpp:376
Definition: dual_math.hpp:969
Definition: dual_math.hpp:802
#define ELI_AD_DUAL_UNARY_OP_HELPER(x)
Definition: dual_functions.hpp:58