From b27b39532ba6df625f24ff03d8ecb3bcbe7f2a05 Mon Sep 17 00:00:00 2001 From: John Maddock Date: Tue, 18 Dec 2007 18:32:50 +0000 Subject: [PATCH] Added expint docs. Updated zeta and expint tests with hooks for other libraries. Added #pragma once to header files. [SVN r42140] --- doc/sf_and_dist/equations/expint_i_1.mml | 46 ++++ doc/sf_and_dist/equations/expint_i_1.png | Bin 0 -> 3416 bytes doc/sf_and_dist/equations/expint_i_1.svg | 2 + doc/sf_and_dist/equations/expint_i_2.mml | 42 ++++ doc/sf_and_dist/equations/expint_i_2.png | Bin 0 -> 4004 bytes doc/sf_and_dist/equations/expint_i_2.svg | 2 + doc/sf_and_dist/equations/expint_i_3.mml | 45 ++++ doc/sf_and_dist/equations/expint_i_3.png | Bin 0 -> 4216 bytes doc/sf_and_dist/equations/expint_i_3.svg | 2 + doc/sf_and_dist/equations/expint_i_4.mml | 32 +++ doc/sf_and_dist/equations/expint_i_4.png | Bin 0 -> 2654 bytes doc/sf_and_dist/equations/expint_i_4.svg | 2 + doc/sf_and_dist/equations/expint_n_1.mml | 41 ++++ doc/sf_and_dist/equations/expint_n_1.png | Bin 0 -> 2629 bytes doc/sf_and_dist/equations/expint_n_1.svg | 2 + doc/sf_and_dist/equations/expint_n_2.mml | 101 ++++++++ doc/sf_and_dist/equations/expint_n_2.png | Bin 0 -> 8293 bytes doc/sf_and_dist/equations/expint_n_2.svg | 2 + doc/sf_and_dist/equations/expint_n_3.mml | 101 ++++++++ doc/sf_and_dist/equations/expint_n_3.png | Bin 0 -> 6019 bytes doc/sf_and_dist/equations/expint_n_3.svg | 2 + doc/sf_and_dist/equations/expint_n_4.mml | 31 +++ doc/sf_and_dist/equations/expint_n_4.png | Bin 0 -> 2832 bytes doc/sf_and_dist/equations/expint_n_4.svg | 2 + doc/sf_and_dist/equations/expint_n_5.mml | 39 +++ doc/sf_and_dist/equations/expint_n_5.png | Bin 0 -> 3032 bytes doc/sf_and_dist/equations/expint_n_5.svg | 2 + doc/sf_and_dist/equations/zeta1.png | Bin 1820 -> 2299 bytes doc/sf_and_dist/equations/zeta2.png | Bin 3761 -> 6326 bytes doc/sf_and_dist/equations/zeta3.png | Bin 2799 -> 4582 bytes doc/sf_and_dist/equations/zeta4.png | Bin 1607 -> 2439 bytes doc/sf_and_dist/equations/zeta5.png | Bin 1597 -> 2478 bytes doc/sf_and_dist/expint.qbk | 227 ++++++++++++++++++ doc/sf_and_dist/implementation.qbk | 8 + doc/sf_and_dist/math.qbk | 11 + .../boost/math/special_functions/acosh.hpp | 4 + .../boost/math/special_functions/asinh.hpp | 5 + .../boost/math/special_functions/atanh.hpp | 5 + .../boost/math/special_functions/bessel.hpp | 5 + include/boost/math/special_functions/beta.hpp | 5 + .../boost/math/special_functions/binomial.hpp | 5 + include/boost/math/special_functions/cbrt.hpp | 5 + .../boost/math/special_functions/cos_pi.hpp | 5 + .../special_functions/detail/bessel_i0.hpp | 5 + .../special_functions/detail/bessel_i1.hpp | 5 + .../special_functions/detail/bessel_ik.hpp | 5 + .../special_functions/detail/bessel_j0.hpp | 5 + .../special_functions/detail/bessel_j1.hpp | 5 + .../special_functions/detail/bessel_jn.hpp | 5 + .../special_functions/detail/bessel_jy.hpp | 5 + .../detail/bessel_jy_asym.hpp | 5 + .../special_functions/detail/bessel_k0.hpp | 5 + .../special_functions/detail/bessel_k1.hpp | 5 + .../special_functions/detail/bessel_kn.hpp | 5 + .../special_functions/detail/bessel_y0.hpp | 5 + .../special_functions/detail/bessel_y1.hpp | 5 + .../special_functions/detail/bessel_yn.hpp | 5 + .../math/special_functions/detail/erf_inv.hpp | 5 + .../special_functions/detail/gamma_inva.hpp | 5 + .../special_functions/detail/ibeta_inv_ab.hpp | 5 + .../detail/ibeta_inverse.hpp | 5 + .../detail/igamma_inverse.hpp | 7 +- .../special_functions/detail/igamma_large.hpp | 5 + .../special_functions/detail/lgamma_small.hpp | 5 + .../detail/simple_complex.hpp | 5 + .../detail/t_distribution_inv.hpp | 5 + .../detail/unchecked_factorial.hpp | 5 + .../boost/math/special_functions/digamma.hpp | 5 + .../boost/math/special_functions/ellint_1.hpp | 5 + .../boost/math/special_functions/ellint_2.hpp | 5 + .../boost/math/special_functions/ellint_3.hpp | 5 + .../math/special_functions/ellint_rc.hpp | 5 + .../math/special_functions/ellint_rd.hpp | 5 + .../math/special_functions/ellint_rf.hpp | 5 + .../math/special_functions/ellint_rj.hpp | 5 + include/boost/math/special_functions/erf.hpp | 5 + .../boost/math/special_functions/expint.hpp | 9 +- .../boost/math/special_functions/expm1.hpp | 5 + .../math/special_functions/factorials.hpp | 5 + .../math/special_functions/fpclassify.hpp | 5 + .../boost/math/special_functions/gamma.hpp | 5 + .../boost/math/special_functions/hermite.hpp | 5 + .../boost/math/special_functions/hypot.hpp | 5 + .../boost/math/special_functions/laguerre.hpp | 5 + .../boost/math/special_functions/lanczos.hpp | 5 + .../boost/math/special_functions/legendre.hpp | 5 + .../boost/math/special_functions/log1p.hpp | 5 + .../boost/math/special_functions/math_fwd.hpp | 7 +- .../boost/math/special_functions/powm1.hpp | 5 + include/boost/math/special_functions/sign.hpp | 5 + .../boost/math/special_functions/sin_pi.hpp | 5 + include/boost/math/special_functions/sinc.hpp | 5 + .../boost/math/special_functions/sinhc.hpp | 5 + .../special_functions/spherical_harmonic.hpp | 5 + .../boost/math/special_functions/sqrt1pm1.hpp | 5 + include/boost/math/special_functions/zeta.hpp | 5 + include/boost/math/tools/config.hpp | 5 + include/boost/math/tools/fraction.hpp | 5 + include/boost/math/tools/minima.hpp | 5 + include/boost/math/tools/polynomial.hpp | 5 + include/boost/math/tools/precision.hpp | 5 + include/boost/math/tools/promotion.hpp | 5 + include/boost/math/tools/rational.hpp | 5 + include/boost/math/tools/real_cast.hpp | 5 + include/boost/math/tools/remez.hpp | 5 + include/boost/math/tools/roots.hpp | 6 + include/boost/math/tools/series.hpp | 5 + include/boost/math/tools/solve.hpp | 5 + include/boost/math/tools/stats.hpp | 5 + include/boost/math/tools/test.hpp | 5 + include/boost/math/tools/test_data.hpp | 5 + include/boost/math/tools/toms748_solve.hpp | 5 + include/boost/math/tools/traits.hpp | 5 + include/boost/math/tools/user.hpp | 5 + include/boost/math/tools/workaround.hpp | 5 + test/test_expint.cpp | 50 +++- test/test_expint_hooks.hpp | 63 +++++ test/test_zeta.cpp | 12 + test/test_zeta_hooks.hpp | 56 +++++ 119 files changed, 1325 insertions(+), 6 deletions(-) create mode 100644 doc/sf_and_dist/equations/expint_i_1.mml create mode 100644 doc/sf_and_dist/equations/expint_i_1.png create mode 100644 doc/sf_and_dist/equations/expint_i_1.svg create mode 100644 doc/sf_and_dist/equations/expint_i_2.mml create mode 100644 doc/sf_and_dist/equations/expint_i_2.png create mode 100644 doc/sf_and_dist/equations/expint_i_2.svg create mode 100644 doc/sf_and_dist/equations/expint_i_3.mml create mode 100644 doc/sf_and_dist/equations/expint_i_3.png create mode 100644 doc/sf_and_dist/equations/expint_i_3.svg create mode 100644 doc/sf_and_dist/equations/expint_i_4.mml create mode 100644 doc/sf_and_dist/equations/expint_i_4.png create mode 100644 doc/sf_and_dist/equations/expint_i_4.svg create mode 100644 doc/sf_and_dist/equations/expint_n_1.mml create mode 100644 doc/sf_and_dist/equations/expint_n_1.png create mode 100644 doc/sf_and_dist/equations/expint_n_1.svg create mode 100644 doc/sf_and_dist/equations/expint_n_2.mml create mode 100644 doc/sf_and_dist/equations/expint_n_2.png create mode 100644 doc/sf_and_dist/equations/expint_n_2.svg create mode 100644 doc/sf_and_dist/equations/expint_n_3.mml create mode 100644 doc/sf_and_dist/equations/expint_n_3.png create mode 100644 doc/sf_and_dist/equations/expint_n_3.svg create mode 100644 doc/sf_and_dist/equations/expint_n_4.mml create mode 100644 doc/sf_and_dist/equations/expint_n_4.png create mode 100644 doc/sf_and_dist/equations/expint_n_4.svg create mode 100644 doc/sf_and_dist/equations/expint_n_5.mml create mode 100644 doc/sf_and_dist/equations/expint_n_5.png create mode 100644 doc/sf_and_dist/equations/expint_n_5.svg create mode 100644 doc/sf_and_dist/expint.qbk create mode 100644 test/test_expint_hooks.hpp create mode 100644 test/test_zeta_hooks.hpp diff --git a/doc/sf_and_dist/equations/expint_i_1.mml b/doc/sf_and_dist/equations/expint_i_1.mml new file mode 100644 index 000000000..f42d338ca --- /dev/null +++ b/doc/sf_and_dist/equations/expint_i_1.mml @@ -0,0 +1,46 @@ + + + E + i + + + x + + + = + + + E + 1 + + + + + x + + + = + + + + + x + + + + + + + e + + + t + + + d + t + + t + + + \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_i_1.png b/doc/sf_and_dist/equations/expint_i_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c2a69a751bcf45345573cb30f4aa8b02c60595 GIT binary patch literal 3416 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 E0AJ6S9RL6T literal 0 HcmV?d00001 diff --git a/doc/sf_and_dist/equations/expint_i_1.svg b/doc/sf_and_dist/equations/expint_i_1.svg new file mode 100644 index 000000000..821f4e2e2 --- /dev/null +++ b/doc/sf_and_dist/equations/expint_i_1.svg @@ -0,0 +1,2 @@ + +Ei(x)=E1(x)=xetdtt \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_i_2.mml b/doc/sf_and_dist/equations/expint_i_2.mml new file mode 100644 index 000000000..87a16f1f2 --- /dev/null +++ b/doc/sf_and_dist/equations/expint_i_2.mml @@ -0,0 +1,42 @@ + + + Ei + + + z + + + = + log + + + z + + + + + γ + + + + + + k + = + 0 + + + + + + + z + k + + + + k + k + ! + + + + \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_i_2.png b/doc/sf_and_dist/equations/expint_i_2.png new file mode 100644 index 0000000000000000000000000000000000000000..52d776c279f30e1cf0abbef9c16927d480f7bf29 GIT binary patch literal 4004 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 Buw4KE literal 0 HcmV?d00001 diff --git a/doc/sf_and_dist/equations/expint_i_2.svg b/doc/sf_and_dist/equations/expint_i_2.svg new file mode 100644 index 000000000..bd5aa4ecc --- /dev/null +++ b/doc/sf_and_dist/equations/expint_i_2.svg @@ -0,0 +1,2 @@ + +Ei(z)=log(z)+γ+k=0zkkk! \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_i_3.mml b/doc/sf_and_dist/equations/expint_i_3.mml new file mode 100644 index 000000000..42fce62bb --- /dev/null +++ b/doc/sf_and_dist/equations/expint_i_3.mml @@ -0,0 +1,45 @@ + + + Ei + + + z + + + = + log + + + + z + + z + 0 + + + + + + + + + z + + + z + 0 + + + + R + + + + z + 3 + + + 1 + + + + \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_i_3.png b/doc/sf_and_dist/equations/expint_i_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3074a9492dcf25800cc8dcd652981928fd25e767 GIT binary patch literal 4216 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 VC;sDcVPIfj@O1TaS?83{1OS0H4NL$4 literal 0 HcmV?d00001 diff --git a/doc/sf_and_dist/equations/expint_i_3.svg b/doc/sf_and_dist/equations/expint_i_3.svg new file mode 100644 index 000000000..6a054024e --- /dev/null +++ b/doc/sf_and_dist/equations/expint_i_3.svg @@ -0,0 +1,2 @@ + +Ei(z)=log(zz0)+(zz0)R(z31) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_i_4.mml b/doc/sf_and_dist/equations/expint_i_4.mml new file mode 100644 index 000000000..c2d777b55 --- /dev/null +++ b/doc/sf_and_dist/equations/expint_i_4.mml @@ -0,0 +1,32 @@ + + + Ei + + + z + + + = + z + + + + + e + z + + z + + + + c + + + R + + + t + + + + + + \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_i_4.png b/doc/sf_and_dist/equations/expint_i_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ae5c58b56089cf804ccf60e89d8b684b20ffa822 GIT binary patch literal 2654 zcmeAS@N?(olHy`uVBq!ia0y~yVA##Tz#z-P#=yYv>8k8Z1_lO}VkgfK4h{~E8jh3> z1_lPs0*}aI1_q%L5N5oWCSSq8z#v)T8c`CQpH@mmtT}V z`<;yx0|V!6PZ!6KiaBp**KY_76+Lbrf3Lbh!KQAtO9PjZgjQQ8XHOEppzh|DB}V!H>ln0V+(62iLf`UYRIRzxH3m??aXC z#qajMzxVxKZU4RUwDUXD-)_Ag_j}IP>yg!OYg5xq7Cv;obl71%$ICL~-OEFMnYc}v z9@VJ!q;1K&14ap|0h}=$IvOj3dIhpRz3FA2bc?~B<(Fsf@0h(hMr4OxGC7XWo3|u#U-&^IPMZ(>5vbOnR@ zim#BLD7(4%ih82mhKpy)u54L2GneTf+ZoLT_uZI{Z*$#Y<6(`PzC~(ASM?g+pQk2X z;ol*-W3``%uE3-|cB@D6!0Os`l8M zUaoxnA=4HGUn@IW@y+9Q-+@Bciu3Wzvp+vr&GUX;a&1M~pX}rVD+Qy9|8(zXe<6^u zoNeDhP9rM@<7VBSj(z_)je%{p6z4^;!?)fWzPPx4K1Y`f_M^~Ir%65us0sV4zA#V3 zZb$ErLrZyPFvaAh<-7kd%5`VBJju#%^VuIQI$V?Zm~XZ3`^Nfd!iD3xoPV4f6Ag>% zA7pv%PW~eKaH-4fa@M-YCAZGcx@l9Bct`3-xzOY#!42*oZ+tuGuv;zUeDBAu=J}=R z2@OkL8vgP!j-IRoBJHrEd-hSTe3^q@9l0W<5 z>w&3a-EYsnvGx2N^lN?Y7S?0YH;zm!k^0a%bLra9GN#wbTQ)cBZ{PK|L%Qk!`+;WH z%r|Z<|JEoTym5GA^V1*ia<=S$dSL$JKWS-`9zA}=_T}M&kMC5hSA95hLgj&Ef^6P} z=f_LdaMb=$_Uu?9SD{fl;WB51aZI(K;Wv-ic+aVk{v=H)>pxBfqBQkTg~Grr8ys(ou6ijdwx9XY7n=gP4~8G6 z%&gVO)HH|;n*ZUC(GMlLb<5rw_V8Rk9`wri{kmeW*!TtBaqcyf?H*fh;O9@g_4L7P zMjHX?3K^z*{zhLG+;)5LMC#S_do!=d|5!HDcdhPB))xj7US&_`*)}UZ|IrDHd8b-- z6&`q;_U-{^1|<> zC#y{LmYUALer7Gx8>OGEsZV@ar_H>1`r*G1EOHO6cU#(~<|-^Xc}$=)a`Kl|$+B7v z_Duc9Pu1M{g?haqj_9>T4n@qNQ<$_RfU&THhJ;l?@l*J3#XJE zOWv0=Z-1D=O7VBB`Dc#Yn8e1Me!cX*A=HJ z(fjAG197~Pp4hDbGz1&+iF#mkv+ql2ltFBaMjr{NgqRgSlnYo?+CsqH zb>oF3bq&?C$JC?u_iSIw-LmD{bfHz-X5XwWy_&D*v5PYzXP@55qt<-^Cxr@p7FHJ1PX+Za?AWN!sCRDicHRwIFK@Q2Km9i_s`gKCrqTta7OqOi zOBH`u?(|q)Ue&0ibMHFydXFsqmFflD`)-`!`fTt)DIx90>iFa%5exd46mK&0wBm~Q z_S +Ei(z)=z+ezz(c+R(t)) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_1.mml b/doc/sf_and_dist/equations/expint_n_1.mml new file mode 100644 index 000000000..b636c81e6 --- /dev/null +++ b/doc/sf_and_dist/equations/expint_n_1.mml @@ -0,0 +1,41 @@ + + + + E + n + + + + x + + + = + + + + 1 + + + + + + + e + + + x + t + + + d + t + + + + t + n + + + + + \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_1.png b/doc/sf_and_dist/equations/expint_n_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a757f89d0e65f96b87b8ab9cb3bd63b295c14758 GIT binary patch literal 2629 zcmeAS@N?(olHy`uVBq!ia0y~yU}$GxU@+ofV_;w?dvM|m0|Ns~v6E*A2L}g74M$1` z0|NtRfk$L91A|Zr2s7SGldoW4V2~_vjVKAuPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw z{mw>;fr0aor;B4q#hkZusyBp(iXOL*-*MupXvcz28%%mdOiURI*93~F>ObRlmpvZh z_Ti&@@RF&MEv7|D`l!v!TxPm#=2WkV{4Qq{Og{%M^E{w1p<`i3n|SN&N3Z&~*551U ze}3ow<9YXg7N(yoe`fx>{99c5+tPP`|9!ic{kC-5nI5LA&Oycoq80bf#7!s>Fp#a_ zjmSy!mdZ+CdvP&?d6%-vSH^X$W=zXHt(bnu8k|3~j>+fJ#@;Q4+$$t3t=gB=9XNSF z<$+>?TmjFAmYKOcM%)ea(#m|E?0cD3=FRMLj>osxEWy2P$-D#22hyFdS{~4~@Z82S zGwne_LfM;ddG=c6zu8w9uUj@(LUj(S4%4~GCJaB!KA0z{dp0ww^fKH#b@@Wof*D~! z3YiKU7td$C4&<_ghJhrW-IFSSoh?8|fKd%%_85_Srt zr(L;yN#~?@Q%XX1%u{{2d(tnjUz`Tq63Q#{#r}$}%VAP6Wwbq;PV;wp72WV#dq+KkfxwQHb7~CNsw}qrRNFo?jOkW`x$vv#2KG~T zbJAWnK5vKQOO*xs1ri^^A6%K>6u>vR@%foIS0m(&8#X4EXr7qZ^lZxe znGQkqp3l8@1zq}bDXd;JaFA5lO3!T&d$VwZSS z)-ts*`%iyzCTHam?hkWr%%6FaJz&SC%z!7=YEL-2kG*b~=Fp>NW4S{8L$l7Wj<4p7 zJJ@FA$bR-e#>793L%@-HgF@8&+q0Da7-~&?Em;@X>k|E>I?R5->Bg@IiagU9xC@ec z%r}=xeib~L^T5-%dP#_4rqaBt*ABK$HQ~CU9(P|v*h;`+;yKUc1LbGl?Df*&S^a!w z#iDn`qIWK_#3;RdE*9Nc^ zHeHYJOKTl}&FA^@R+BpqTv+gG=(cQCG)W%^e=MB}Ma)uA33&M|mn=gqRe6C zClT`|p5t!dZwPx}c4x26e!p+#kLMj1d*Er~U6)ZYZ$HCv_muY5U%wkAWxuFs)L9s; zEMM|&f>!Tq)-}xQ^pqDz#LmC*^+m#uD|1e6^lp*SPgzl}Qy^F%av|n+AH{uw-;IG zA3igW$!~gzb-~IdI}gM>sCuBcjh|yLmyG7h{+YR+ug;uN3(JhR+_JQ0z0{;-7v}Zf zS}UOL?yaGJ{P`Ne9p8h>v@P2D+cz19e>wic;JbFhwwbmwmA*%9NX&mQKlE0h@R>KZ zp3xt7{;rP=F>m{}-+jB2kma{I^6BfR*Tz|n?t9s)%nKgymRthIIu=gGK z&MI_L@uk_FT)p=8vv1nCo-o`y5byuu(uu^hkK$`~^V+GnbG+|kd3Ge_-5SSy{y#?_ zsTo(>yQWFoX}t+{3)fVbYO$2%%p%*h>y5XBDFi#IJ$Z4i!_CP%*sEP&)y%a_{qx%X zGQ94%SEZt4kQNoR6+ixi_sT-FfB?fyrCkGiGHX>?);Wdcjx?GE0Ok%Z{DBHLf@I5KWtp*<#ut?3r2;^{|jnt#U-5I^FEimN^FZOG(MfSWwoh8)BGx9 z`S^f$E&UA6%5R@Do_^`{LVA9gn5hy2OARM~ldpHCe8c;yJm$XB7uTuTbnP|X=eT2{ zKzwX!1nHHXdGb%GkbN#2vC z&aSz7W*uwX`O^y~2p7xl+xk)LpZ$;Ct&TN_QGR1eksgxD(4(+19=?{J%I3Dz5ITL%>irxAjLK6!5j!1CrasOR+s-CF!bE*wb*94o(sXLH>Vvf8zEbHnsAZ>Fjw8t+~nbo5#G$_j;b_kO6zE<5K4EFJF}? +En(x)=1extdttn \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_2.mml b/doc/sf_and_dist/equations/expint_n_2.mml new file mode 100644 index 000000000..37643d496 --- /dev/null +++ b/doc/sf_and_dist/equations/expint_n_2.mml @@ -0,0 +1,101 @@ + + + + E + n + + + + x + + + = + + + + + + z + + + + n + + 1 + + + + + + n + + 1 + + + ! + + + + + ψ + + + n + + + + log + + + z + + + + + + + + + k + = + 0, + k + + n + + 1 + + + + + + + + + + 1 + + + k + + + z + k + + + + + + k + + n + + + 1 + + + k + ! + + + + \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_2.png b/doc/sf_and_dist/equations/expint_n_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0776a656f929ac14deb91850ed7d4c3401c836e9 GIT binary patch literal 8293 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 TySa^lfq}u()z4*}Q$iB};_v9p literal 0 HcmV?d00001 diff --git a/doc/sf_and_dist/equations/expint_n_2.svg b/doc/sf_and_dist/equations/expint_n_2.svg new file mode 100644 index 000000000..50ee895c0 --- /dev/null +++ b/doc/sf_and_dist/equations/expint_n_2.svg @@ -0,0 +1,2 @@ + +En(x)=(z)n1(n1)!(ψ(n)log(z))k=0,kn1(1)kzk(kn+1)k! \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_3.mml b/doc/sf_and_dist/equations/expint_n_3.mml new file mode 100644 index 000000000..a07a53b5c --- /dev/null +++ b/doc/sf_and_dist/equations/expint_n_3.mml @@ -0,0 +1,101 @@ + + + + E + n + + + + x + + + = + + + e + + + x + + + + n + + + x + + + n + + 2 + + + n + + + x + + + + 2 + + + n + + + 1 + + + + + 4 + + + n + + + x + + + + 3 + + + n + + + 2 + + + + + 6 + + + n + + + x + + + + 4 + + + n + + + 3 + + + + + 8 + + + n + + + x + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_3.png b/doc/sf_and_dist/equations/expint_n_3.png new file mode 100644 index 0000000000000000000000000000000000000000..98c4efb6350f52d7ebe60af36aeb8274c9a4f2f2 GIT binary patch literal 6019 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 Qfq{X+)78&qol`;+0CJs9@c;k- literal 0 HcmV?d00001 diff --git a/doc/sf_and_dist/equations/expint_n_3.svg b/doc/sf_and_dist/equations/expint_n_3.svg new file mode 100644 index 000000000..e293c713b --- /dev/null +++ b/doc/sf_and_dist/equations/expint_n_3.svg @@ -0,0 +1,2 @@ + +En(x)=exn+xn2+n+x2(n+1)4+n+x3(n+2)6+n+x4(n+3)8+n+x \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_4.mml b/doc/sf_and_dist/equations/expint_n_4.mml new file mode 100644 index 000000000..54bda19e1 --- /dev/null +++ b/doc/sf_and_dist/equations/expint_n_4.mml @@ -0,0 +1,31 @@ + + + + E + 1 + + + + x + + + = + x + + + log + + + x + + + + + c + + + R + + + x + + + + \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_4.png b/doc/sf_and_dist/equations/expint_n_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f65927b2591776cea127df44b54529eac5cd6b33 GIT binary patch literal 2832 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 Tma1i7U|{fc^>bP0l+XkKp-4|0 literal 0 HcmV?d00001 diff --git a/doc/sf_and_dist/equations/expint_n_4.svg b/doc/sf_and_dist/equations/expint_n_4.svg new file mode 100644 index 000000000..c9d74cb54 --- /dev/null +++ b/doc/sf_and_dist/equations/expint_n_4.svg @@ -0,0 +1,2 @@ + +E1(x)=x+log(x)+c+R(x) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_5.mml b/doc/sf_and_dist/equations/expint_n_5.mml new file mode 100644 index 000000000..a888144ab --- /dev/null +++ b/doc/sf_and_dist/equations/expint_n_5.mml @@ -0,0 +1,39 @@ + + + + E + 1 + + + + x + + + = + + + e + + + x + + + x + + + + 1 + + + R + + + + 1 + x + + + + + + + \ No newline at end of file diff --git a/doc/sf_and_dist/equations/expint_n_5.png b/doc/sf_and_dist/equations/expint_n_5.png new file mode 100644 index 0000000000000000000000000000000000000000..02d488994b3ad99b41e6bf2f1b9c2207a13f35d8 GIT binary patch literal 3032 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 Y-rm#hqVaiQ3=9kmp00i_>zopr04u?@$N&HU literal 0 HcmV?d00001 diff --git a/doc/sf_and_dist/equations/expint_n_5.svg b/doc/sf_and_dist/equations/expint_n_5.svg new file mode 100644 index 000000000..5ab788944 --- /dev/null +++ b/doc/sf_and_dist/equations/expint_n_5.svg @@ -0,0 +1,2 @@ + +E1(x)=exx(1+R(1x)) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/zeta1.png b/doc/sf_and_dist/equations/zeta1.png index c611d30e647a74a4ce6240d4860e582238c13e93..5243112172bed34b33a91468938919c9ba3098f1 100644 GIT binary patch delta 2287 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 G&;$V5jZW(T diff --git a/doc/sf_and_dist/equations/zeta2.png b/doc/sf_and_dist/equations/zeta2.png index dbb613f2bc53a2afc04b064a21fe116a33b69bb1..b6ce624bc193f252cc57d5ca664765d3f1b7908c 100644 GIT binary patch literal 6326 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 N44$rjF6*2UngEET0`UL< diff --git a/doc/sf_and_dist/equations/zeta3.png b/doc/sf_and_dist/equations/zeta3.png index 4c6b07f280043368c282dd35decb05b45689673d..ab1648f31d0719edb19929c269148dfe10b3fd8c 100644 GIT binary patch literal 4582 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 delta 2771 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 diff --git a/doc/sf_and_dist/equations/zeta4.png b/doc/sf_and_dist/equations/zeta4.png index 89a5d2c0e4c88f50d38506041a5d24e31f29d9a8..26280b1447bb510e4c06317d7dd3b97c49643f8c 100644 GIT binary patch delta 2428 zcmX@k(=I$grJkkO$uoq5gM*`nBc+3Zfq}EYBeIx*L8t_T8SkaZS1>RzNS3%plmzFe zm6RtIr81P4m+NKbWfvzW7NqLs7p2dBXCuYHz{%q2;uumf=k1*84WXr?$L-_ybga(HL6n=McN&@ROsP-YCGRPhx*MQEqiAji#Xe1wRBo$l4Mt3 z#n<>%Rdf3N-fyY{?g_WQlpey!b_ zI(r_QXKjOQV{U`!0hco*Z}=OFz0Z7feV~27y8giBum5Vh zE9P?gthes35?*n!-ix^iT~%^f?y%Ib)ZG8pWwgk<@pkrsbb-Q!cc)24sc&5``qh{D zU&?R$w?04jn|iE2z2ProA@fYVm3hDFuZFE}&F*;IxbVQtZPTX+Z~7}(5X<|chuvjj z((>;21`qZh=v|qwvcdYpTfS$%E#zk{Rb0tyF~i{PHO6_2cH3%QC*GKQo^4pVo% z*Np89hdE>GI3seZ!-BQTijw;L+V`(jpRVM?aF1PXk_p2N$r+3_3~%zQGbdTwZ0*kW z-&h~(!^F2?@BAgbjXMvpO3q|md3U;usI-OTi}dQQC1*J|=h$cbv;Ow&z_SD0+vdN0 zqcSOt>2}&KcaJKC%jNsu%5OFHmp16@==j4kgM&xuUr%+8zP^zByj$T`r>!@C<9INO z>!|;>zuS$Hg&X%xO8H&txn01{*^q15<#nk$dRWh`te=J9$ytbot*tTFZmMe zRxZx8KhW6XY-ZiQb9I?q<9ao_$(KJ~DcR%Ac~kvz#C*PIbG&)yx<8n5BsA-nQRrx^M&UO2)!T~D1!pXs`n)WfN1F_*Q!-RC@dW8FO$p>K?G+xJQw_*Q&i z@c|dlQzyjap3lBAA-;XXU&V(P^qBJ|T(Q=kyzlfemmB*2dihN4LVj<~JleP{Ea!GU z!+(ZtQ%#o5nX@EWnem-DCIGB*C(TJYcj-?O*uIRUEE&n1`$KGjID6Wmz2qvcK7%D>ru zF=eWUmK}|Gb|Y>l`vum+wGOOC(pT$Gt$f*VJiW2Hqh;~U1EL4wgYL^&uD9*!V9-&P znfvpAqvXuvmv7APY*B0A<+T2~#_01qhB@3i>SxwU9#|o>-(B%nAzy(&;lsD#Zr?PL zR@Wb%v*Qf&JN7!K8Ls7%3J*+W(RSOk(oZGl=$m(uVP(M&EFJ{i{=Y73q0EFIJnC|H zx$ATHhopPGb-E;Z;CgQTLdG3AiN94n|8@$za+-e9!zb|qd+z)R#?yTp8aq#a3T;`n zC+Hee9^1E7kLK`pXdHN9^SFxGT_haubiC%MREx052oxRWBe|B5jl17)h)Bm*Z}Z-{Mb^JUPyCH__t|>f;ZoH$>D0}cq8?HA z%MPbV)lJf#bZV(zJ#(7?^|VYomn?KiyK~h=Uxd3=E`lZE`PUrP0Nz`%<->Y+31$Ui@dA9F}bljR^&mM z$d*3#2_<2#^p@XXZeUiOoB!MM(Yv{8DaWtw3G=)iTzT(HzxUe7*G{EsZ*P6q zY^Ic68OUDL>QM7PsCk?GWRq5d*!p$Kmt4Ia4@fVaVs-Yj$kJl|DixL5Sp_%bSDR0N z*A{nVw`tjHhjj_^>xJ5{xN-P0Nct_X%Z9b z)9<_y_1n2n{NalqT%A8dQ#khU>3tA6XU z6Xwb}>o?R|Z!c0sc~Q)u;cmA_0DY!c3U7IEJe58LF? zHCf&*#y~fuZPxS_&s$AD=9@9zW4fkpWE{W7bo#nSlT|c4gH_K?F`0T}%FgW(7rt4$ zIGtl%daBXtfZ&1Dmx8yQ9w&)?*zi`c)7c!w)WPng?F69Ci$gaeKoD9;_SDUAm)`1T zeA;cjFxa$z+w{^US3KX{oEB8hzr_0ULYKr7XD9tC3t!qcFYwH5r_$C9w(TAP(wuYR z(yd~hyf;dVpW5;GcvQk@2Xt1^hR%Y-ApronTbWOxYbVDch>ggbzhs7 z%dGTPxkg=9PVHsx1FhTdpKrLftVJ$H^Cg=SYi03*H>XW^GymhictM(NyU?#z1_lNO MPgg&ebxsLQ03+*=-v9sr delta 1570 zcmZn{KF%{iB|;(DBgmJ5p-PQ`p`nF=;THn~L&FOOhEf9thF1v;3|2E37{m+a>mKuVEaktaqDeNc1LKa$i4DQTMkZ|;J8FBiDS0TAvre3w2P-bxT<`OJUR?rXJmX4DEZR2 z_k>d0z4yoa0|dP^4=+08Zu)ES@%~8@CT(g;nV?X0BIWMBt3Ua2`JY$5uY6Pd?%#vQ zbE@C%`@L@Wd8^-Rwtg$`4-!i~5c1)z(2bp)_1nby3Ui++1RuD4aOZ=_1a{dp(F&y< z0(0hX$?wTA2`=^yxjPQq=odI@Fj}w zTPFtJXWPf{jzON`J*)hZ;`PseM<4i}{OvkJ`>YMgvJuMF2TUIXKUn#o^g(shZO;cB zKRAAD@{hN!uV{?p>&w41&*USkg=CFH4XcdysR?~%g|C($w0yAh!Q==0Hvjl#-|FrA zXTu)-#G1cRddK<~3`y4;mgmmRmE(VrtyVEFF~ ze(|Qvb>HS%^6y#8>|#vEB%zD=^s+^Br z_N+_|`z?KkD~|i!)mvwueXCzS<=CQ$519CyRod?xKH0&(=dgNAk+zb!WP-QqNB6c` z^I1Q9wjZzj9l7%3;fSX9877(j#xu^pau4U3eXMKK(pL*RGRsx+C6s=DW_n}t^^Ql9 z#?s?&PeqCwT$;AZ`di)yndUb;JJk=js!ZJEP}1ywJD%6?!_q%L(maxGOgt=WTz_TS zD(h`WHug6PJKvhax$fM-X)jM{K7adBX8Mz|1Iz!K<@pt7UC|AQSiYbjUaDvg03_ejiI``zK+;8MCl&P4e!(yV4iGUupQe z<>9^1cgyd4=-REYvFg6v-?eG!HK*rB9r}iD^*zDUc7|Hc>QGYfKG!{SY56BH&CMr2 zpSqZrA{)N`yNvYuzAG&!dN#NHUfvjAd~I@9$C_DszB3M7Gx{MLwAFIOoLwJJ?)iIK z>C6iM+rOtMN4_}sVvhPoRlzFD7qy1B^;3S!rA}nYp1S!@{5I>=S0>BrUTR2V^J%es zujT$iXnUGQebWr_sln^#ru;QEd-Y(x?bVH6L!VbTn|12{!ULQ6gEv zy<-K-w{M0lJDpfx7xk39*>On5UP7@?Q*j^r`DL4D@LkO6Xe!FT*w({+!h&7W-TQ(5 zqwm*E4mY=0W_Bh|TC?Elts^_1+T4j?vVJ}@spI;_-!mh&1-5?-SQckd_w~JdW)#^Kwb=D;RZ~q*+Bf?`tZ*=U8a` zpBt@9b*hn@SZ@3L^4M#8kn1J=z`SnIbRmhVcRs_a~_+S<9yBdT3z8_VCd^~*&Q z{T@D=A*6JEe{HCd$VJ7EpWZcmf3?aou}|=kME42K+~q}b?uu3)3^goCtRlZ zz%ReFhh8!_j!Q;tN$rvSevxZw??&BQ!fLkmQ3tKIxvuJnvfb8~8z`j`38F6=`P6K2 r(oC3IlBV8UId}6Jx%2>$f2?KxPWs}lKOGnt7#KWV{an^LB{Ts5gBt^R diff --git a/doc/sf_and_dist/equations/zeta5.png b/doc/sf_and_dist/equations/zeta5.png index 8d3f4376b316b81212e45c76e611f29baa575fe9..8667993f95e8a06705d1d8fdf9d3d30190456b72 100644 GIT binary patch delta 2468 zcmdnXvrc$|NN&PIxXfm7Sl#WAE}&fB?_6J$e0kJZN;C7KFM zlQVd@=d3>MdvLN0~6O z#ayCo3jadQ4tp)E*IIL?VslR0RHx7t0ZLk}s{$6fgm8r}bn09ovdXDd=;CslDN8OM z$lF$b-FtthL;KtP-&5yoQp^l}F!_LclM2Gbok6`}LY=a{B>?sC5*$67R>&qr>}DVBuaVh>JF z;*-sYWMj=SuVJ{&XwI{k~i4k zX%#P9!C1j8G5_Un<_GP}hUv96_1nA~lz$c6KY91FA%oF=jHiuCgBt zXWrGZYh{_=jpL2~8N!*BxqkI9>t#>4Z}8w+-HFcz9~|1s%7Qj2XJ_nYUeCDrmSz0k zIj=7sIDO!V+WX(7WrmrH&-63vGaf$m=w^>(8Ow&SsF$;w4*UPGEof6Qt*(z(ck~FVBvt6KVsTFMXTz zjKQDrJM(hyS31q#*_(tW*)jR3%Y4^+;C6evhm@bjm8skApArl>uI&u2D0yZ-^R8Ltd=%ZY=@TjK4WzHCf8P&!)<=3am z&bhUY$YHDAdVX%K&skBEnN_YSbnKh= zf&AH3O*K9$VhzW0?C*rDO%h|8opK`D^OW1&ybZNEvUaNly3byAY00;L)c@5Zq48~a z)~@`?x8#cF9{Ly0B*uIrPUGb>ll+_eb~C46tK1WHX3O7zX&JxuJl`{ZXNqQ8oLldF z>1&JXB-iiO^JbZETjJcX*tq^l;Q;6xP z@cgd1qb_P!U53^DmN^~@AH+7SIcJg0JU{P4#CE>Z0Hmw%KV z*d{!lvoH3*?9vKd#%av6mw#S+s^-|7=e3+aBnxsD^(ve>BNrHb$jY$5T{xL1qCQ}e zsC)a8ualERE#ERE2Srb5vFVMlJU_i;dG}{Eec_9Tl-97HSy8-KOg|{5ZogO7|GNt7 z!xrDJ-(|M-bH{qu@9gJJevx(7v2p#Ow$bbSRFk9MlvPj7Jeu-ot`9?>_ZH0q9{1{} zMU}jtq8zPpdBO3#1LakbuIH4)=FKeq<->NbUQvs`=rCO&vK>F2l7 z_9})Q>!0mu{_!|^&gJhjRjL!$@mrXFwcLF4^N-0U=e|hYl1WcmU?S!%k>Z4dZd zXFN@R8Y}JgM#8u{aM!vk>*BqqT+z(5X1Kk5x%dXvhXs>g?l#-NHt}?pW{$nF||pe`NVtRC1MH3MpNwONg7FctEx#_{V}JlT~Y#mfx2Tp53eF`?Oi@ z*3%<;Q^e1`oA+k7)Rg`EEgCm`*Ppf}@7tm!wVcPd&$M!8_BYe4Kkm44uetMl_a`U% z&R^($_G>|i^v$&sJ{MO^WAl_|ux8l5V&Ph6mYQ{wO^p9u@YFT)$~7+jC9_ulw-)#5 zj{A!=;tY(UtG{n#iO}ABR+mvMEkj)R)MoRz24)ns(rL$F1!%4{&Y^ z4{`OdYB$W8UzJ!jQj)mX+osnuat@y#6~c8oquVXW&)vsXXf&T#C; zKX2aLQl*b|Ti@>4@Ne#c+-?0?Q)8MLC#_>syZLV7|I>f3DtpGOHnG>QUdXF%@_G6; z{mh^Se&+9jJJ-3-7OsEVyyT-xQH}fU^ZfN&Y;n`--3>ihWvJGVXeyftUV2g#Q{l`&e^v$o875_#QU@oMObTT%Nq zcS`MJt=~31&6?>(oK~h(!JH+ZW0t$=@!HJ!5GfXV>WYj^sK9BJzZ@1a$j{PzsdIe>H8!77p{`eTxpOpanYRnN~gA-lZwb>n(7oPQ8b~%@6-9hn&NWR zK&R_wf|o8bgM_<&@O)S~>$B>Yhu)v+5>zJcc;EPH|K^njOD62&yv;E~_oY!%@QsO0 ww{}fBeoyL$msEbs64~yK`^u4b?mn;At-3kCQDmzl0|Nttr>mdKI;Vst0KRUOApigX delta 1560 zcmZ1{yq9N!N`ykPN02WALzNl>LqiJ#!!HH~hK3gm45bDP46hOx7_4S6Fo+k-*%fHR zz`($g?&#~tz_78e=6B#^1_lPk;vjb?hIQv;UNSH+uqAoByDoix5|Q)z+yA-mFI3Fg{QOSwvom*gfB*mB z@xAJIJB!o*)&Kh`Z|ttw=#ao$s>I~jyQs6ig0+yV(5i4juiIH^}9BSLb=VCGsXrB zy^pA$%2+=|St>y?=Ymo*+liu9SIgf{VSlIDeBYh2ng3~9&04J$ckSl}J~+OZH@sq= z#mox3kCBh;VxAjr5uE!~bv8wypmE-M()@{AZo|Q#Y48?!30XcfzeN_c|SU zk9OUhm+Z84Vedk|mQr&yo$5vRlipQIuVO#VP_&6^eo|-LvQye~e_w3H-X-FVw5`>w9xy4EmTIj&v( zRqB!U&g)s%b5GoSrgY#}{p1S8CsleMoh3@#+5UdZY+*CydT)Q|x$}pRdfi)lCvOQo z-QxDBzu@n8!S_Zjx{0hWE;Su575!M~o#=S$wP#x;^GBU0K6|?U`^Nb1kvqA^*K+#f zm#>9_n9TkN9*KVV@u$@M3;(Va)K9AWd}^~Ocfe6;k@Ys;)$iP1ar9K7qN1|E!`b^}w^d+OcTc)5_V3$6b#|7ryn9xV(?& z*IDiJ*Sz$ru4H@pSXIsrIgoL9$<2n)Zwrp!*mh~&=dQNuKXt6XZa(%rmuVn-@5P+B zV@d`Z`4wH&^}dFYJJ0;i)BjlfqrP6mX5HFTpPG{`3%Pk5<4;-#uxL4*+jih+-_MD5 zvCHevO!b=nYi&jIqgQ7eTB_|2zkWIKb^3wacHsrAKbtrcEx%rFI)1eB)TtK3-cphN z%{5Y6T5MUweV>V{q)X4}h{=sTa$uiR-SzW}>uMKqR%ILO$}9}{A#%`KAZe0gZ(j_5 z_)YhVahtpJo!j5mM}Amfsq#?krdW#x^A^!Eqp%;<^&uN1BURWAZ>Tq@nA7X=O+LW= zz4Ofpn|Wh=YffKiFZ=S7wg1=G&aDO-eO7)QbvNbLTX)(E#=GU%U)XT!jib|@)>l*Z zX>BZcuWHwM($M_a+w)E4Pd2@O&&pq8`>RI!qowGZ#UH{BXh!i(X3gxKz*{M8b6P@l z$~O7#C#!m2gmc&b`qHgxdHd6+7zPU&$;%;+`erDFiT%}EYt&pd@kf`~U6pV1wNu=a z_C@!-^1BxNYIm{ElPIS+%im7AFRxdyU0AZAO69BChpw;b$L=IE{#zgVMpdx#$s2CF zFQ>czi)(4TE#|Q0x_4LlSN8kzgjAUxiHlD*{hZkRUC>E3>?QxyqWTpZd|0d1e;$9^l|a`SiXPO>ym!V c*Zs@A=Wl>T)!wGV3=9kmp00i_>zopr00E}))Bpeg diff --git a/doc/sf_and_dist/expint.qbk b/doc/sf_and_dist/expint.qbk new file mode 100644 index 000000000..f71bb32d8 --- /dev/null +++ b/doc/sf_and_dist/expint.qbk @@ -0,0 +1,227 @@ +[section:expint Exponential Integrals] + +[section:expint_n Exponential Integral En] + +[h4 Synopsis] + +`` +#include +`` + + namespace boost{ namespace math{ + + template + ``__sf_result`` expint(unsigned n, T z); + + template + ``__sf_result`` expint(unsigned n, T z, const ``__Policy``&); + + }} // namespaces + +The return type of these functions is computed using the __arg_pomotion_rules: +the return type is `double` if T is an integer type, and T otherwise. + +[optional_policy] + +[h4 Description] + + template + ``__sf_result`` expint(unsigned n, T z); + + template + ``__sf_result`` expint(unsigned n, T z, const ``__Policy``&); + +Returns the [@http://mathworld.wolfram.com/En-Function.html exponential integral En] +of z: + +[equation expint_n_1] + +[h4 Accuracy] + +The following table shows the peak errors (in units of epsilon) +found on various platforms with various floating point types, +along with comparisons to the __cephes library. +Unless otherwise specified any floating point type that is narrower +than the one shown will have __zero_error. + +[table Errors In the Function expint(n, z) +[[Significand Size] [Platform and Compiler] [En][E1]] +[[53] [Win32, Visual C++ 8] [Peak=7.1 Mean=1.8 + +__cephes Peak=5.1 Mean=1.3 +] +[Peak=0.99 Mean=0.5 + +__cephes Peak=3.1 Mean=1.1]] +[[64] [RedHat Linux IA_EM64, gcc-4.1] [Peak=9.9 Mean=2.1] [Peak=0.97 Mean=0.4]] +[[64] [Redhat Linux IA64, gcc-4.1] [Peak=9.9 Mean=2.1] [Peak=0.97 Mean=0.4]] +[[113] [HPUX IA64, aCC A.06.06] [Peak=23.3 Mean=3.7] [Peak=1.6 Mean=0.5]] +] + +[h4 Testing] + +The tests for these functions come in two parts: +basic sanity checks use spot values calculated using +[@http://functions.wolfram.com/webMathematica/FunctionEvaluation.jsp?name=ExpIntegralE Mathworld's online evaluator], +while accuracy checks use high-precision test values calculated at 1000-bit precision with +[@http://shoup.net/ntl/doc/RR.txt NTL::RR] and this implementation. +Note that the generic and type-specific +versions of these functions use differing implementations internally, so this +gives us reasonably independent test data. Using our test data to test other +"known good" implementations also provides an additional sanity check. + +[h4 Implementation] + +The generic version of this function uses the continued fraction: + +[equation expint_n_3] + +for large /x/ and the infinite series: + +[equation expint_n_2] + +for small /x/. + +Where the precision of /x/ is known at compile time and is 113 bits or fewer +in precision, then rational approximations [jm_rationals] are used for the +`n == 1` case. + +For `x < 1` the approximating form is a minimax approximation: + +[equation expint_n_4] + +and for `x > 1` a Chebyshev interpolated approximation of the form: + +[equation expint_n_5] + +is used. + + +[endsect] + +[section:expint_i Exponential Integral Ei] + +[h4 Synopsis] + +`` +#include +`` + + namespace boost{ namespace math{ + + template + ``__sf_result`` expint(T z); + + template + ``__sf_result`` expint(T z, const ``__Policy``&); + + }} // namespaces + +The return type of these functions is computed using the __arg_pomotion_rules: +the return type is `double` if T is an integer type, and T otherwise. + +[optional_policy] + +[h4 Description] + + template + ``__sf_result`` expint(T z); + + template + ``__sf_result`` expint(T z, const ``__Policy``&); + +Returns the [@http://mathworld.wolfram.com/ExponentialIntegral.html exponential integral] +of z: + +[equation expint_i_1] + +[h4 Accuracy] + +The following table shows the peak errors (in units of epsilon) +found on various platforms with various floating point types, +along with comparisons to the __gsl library. +Unless otherwise specified any floating point type that is narrower +than the one shown will have __zero_error. + +[table Errors In the Function expint(z) +[[Significand Size] [Platform and Compiler] [Error]] +[[53] [Win32, Visual C++ 8] [Peak=2.4 Mean=0.6 + +GSL Peak=8.9 Mean=0.7 +]] +[[64] [RedHat Linux IA_EM64, gcc-4.1] [Peak=5.1 Mean=0.8]] +[[64] [Redhat Linux IA64, gcc-4.1] [Peak=5.0 Mean=0.8] ] +[[113] [HPUX IA64, aCC A.06.06] [Peak=1.9 Mean=0.63]] +] + +[h4 Testing] + +The tests for these functions come in two parts: +basic sanity checks use spot values calculated using +[@http://functions.wolfram.com/webMathematica/FunctionEvaluation.jsp?name=ExpIntegralEi Mathworld's online evaluator], +while accuracy checks use high-precision test values calculated at 1000-bit precision with +[@http://shoup.net/ntl/doc/RR.txt NTL::RR] and this implementation. +Note that the generic and type-specific +versions of these functions use differing implementations internally, so this +gives us reasonably independent test data. Using our test data to test other +"known good" implementations also provides an additional sanity check. + +[h4 Implementation] + +For x < 0 this function just calls __expint_n(1, -x): which in turn is implemented +in terms of rational approximations when the type of x has 113 or fewer bits of +precision. + +For x > 0 the generic version is implemented using the infinte series: + +[equation expint_i_2] + +However, when the precision of the argument type is known at compile time +and is 113 bits or less, then rational approximations [jm_rationals] are used. + +For 0 < z < 6 a root-preserving approximation of the form: + +[equation expint_i_3] + +is used, where z[sub 0] is the positive root of the function, and +R(z/3 - 1) is a minimax rational approximation rescaled so that +it is evaluated over \[-1,1\]. Note that while the rational approximation +over \[0,6\] converges rapidly to the minimax solution it is rather +ill-conditioned in practice. Cody and Thacher +[footnote W. J. Cody and H. C. Thacher, Jr., +Rational Chebyshev approximations for the exponential integral E[sub 1](x), +Math. Comp. 22 (1968), 641-649, +and W. J. Cody and H. C. Thacher, Jr., Chebyshev approximations for the +exponential integral Ei(x), Math. Comp. 23 (1969), 289-303.] +experienced the same issue and +converted the polynomials into Chebeshev form to ensure stable +computation. By experiment we found that the polynomials are just as stable +in polynomial as Chebyshev form, /provided/ they are computed +over the interval \[-1,1\]. + +Over the a series of intervals [a,b] and [b,INF] the rational approximation +takes the form: + +[equation expint_i_4] + +where /c/ is a constant, and R(t) is a minimax solution optimised for low +absolute error compared to /c/. Variable /t/ is `1/z` when the range in infinite +and `2z/(b-a) - (2a/(b-a) + 1)` otherwise: this has the effect of scaling z to the +interval \[-1,1\]. As before rational approximations over arbitrary intervals +were found to be ill-conditioned: Cody and Thacher solved this issue by +converting the polynomials to their J-Fraction equivalent. However, as long +as the interval of evaluation was \[-1,1\] and the number of terms carefully chosen, +it was found that the polynomials /could/ be evaluated to suitable precision: +error rates are typically 2 to 3 epsilon which is comparible to the error +rate that Cody and Thacher achieved using J-Fractions, but marginally more +efficient given that fewer divisions are involved. + +[endsect] +[endsect] + +[/ + Copyright 2006 John Maddock and Paul A. Bristow. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] diff --git a/doc/sf_and_dist/implementation.qbk b/doc/sf_and_dist/implementation.qbk index d3e8701c3..6e4183ec8 100644 --- a/doc/sf_and_dist/implementation.qbk +++ b/doc/sf_and_dist/implementation.qbk @@ -445,6 +445,14 @@ and a command such as: [pre java -jar 'C:\download\open\batik-1.7\batik-rasterizer.jar' -dpi 120 *.svg] +Or using Inkscape and a command such as: + +[pre for file in *.svg; do + /cygdrive/c/progra~1/Inkscape/inkscape -d 120 -e $(cygpath -a -w $(basename $file .svg).png) $(cygpath -a -w $file); +done] + +Currently Inkscape seems to generate the better looking png's. + The PDF is generated into \pdf\math.pdf using a command from a shell or command window with current directory \math_toolkit\libs\math\doc\sf_and_dist, typically: diff --git a/doc/sf_and_dist/math.qbk b/doc/sf_and_dist/math.qbk index 50180856a..7fde5857b 100644 --- a/doc/sf_and_dist/math.qbk +++ b/doc/sf_and_dist/math.qbk @@ -163,6 +163,15 @@ and use the function's name as the link text] [def __powm1 [link math_toolkit.special.powers.powm1 powm1]] [def __hypot [link math_toolkit.special.powers.hypot hypot]] +[/zeta] +[def __zeta [link math_toolkit.special.zetas.zeta zeta]] + +[/expint] +[def __expint_i [link math_toolkit.special.expint.expint_i zeta]] +[def __expint_n [link math_toolkit.special.expint.expint_n zeta]] + + + [/ distribution non-members] [def __cdf [link math.dist.cdf Cumulative Distribution Function]] [def __pdf [link math.dist.pdf Probability Density Function]] @@ -347,6 +356,8 @@ for these distributions. [include zeta.qbk] [endsect] +[include expint.qbk] + [include powers.qbk] [include sinc.qbk] [include inv_hyper.qbk] diff --git a/include/boost/math/special_functions/acosh.hpp b/include/boost/math/special_functions/acosh.hpp index 5fa16a807..48cce3545 100644 --- a/include/boost/math/special_functions/acosh.hpp +++ b/include/boost/math/special_functions/acosh.hpp @@ -10,6 +10,9 @@ #ifndef BOOST_ACOSH_HPP #define BOOST_ACOSH_HPP +#ifdef _MSC_VER +#pragma once +#endif #include #include @@ -110,3 +113,4 @@ namespace boost + diff --git a/include/boost/math/special_functions/asinh.hpp b/include/boost/math/special_functions/asinh.hpp index 502e514b0..6caa4bbc7 100644 --- a/include/boost/math/special_functions/asinh.hpp +++ b/include/boost/math/special_functions/asinh.hpp @@ -10,6 +10,10 @@ #ifndef BOOST_ASINH_HPP #define BOOST_ASINH_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -110,3 +114,4 @@ namespace boost } #endif /* BOOST_ASINH_HPP */ + diff --git a/include/boost/math/special_functions/atanh.hpp b/include/boost/math/special_functions/atanh.hpp index 35325a3d7..b67297ec3 100644 --- a/include/boost/math/special_functions/atanh.hpp +++ b/include/boost/math/special_functions/atanh.hpp @@ -10,6 +10,10 @@ #ifndef BOOST_ATANH_HPP #define BOOST_ATANH_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -120,3 +124,4 @@ namespace boost #endif /* BOOST_ATANH_HPP */ + diff --git a/include/boost/math/special_functions/bessel.hpp b/include/boost/math/special_functions/bessel.hpp index 98b32b33c..57ec5fb0e 100644 --- a/include/boost/math/special_functions/bessel.hpp +++ b/include/boost/math/special_functions/bessel.hpp @@ -10,6 +10,10 @@ #ifndef BOOST_MATH_BESSEL_HPP #define BOOST_MATH_BESSEL_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -482,3 +486,4 @@ inline typename detail::bessel_traits >::result_type sp } // namespace boost #endif // BOOST_MATH_BESSEL_HPP + diff --git a/include/boost/math/special_functions/beta.hpp b/include/boost/math/special_functions/beta.hpp index 5add7d874..01fa03bfb 100644 --- a/include/boost/math/special_functions/beta.hpp +++ b/include/boost/math/special_functions/beta.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SPECIAL_BETA_HPP #define BOOST_MATH_SPECIAL_BETA_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -1348,3 +1352,4 @@ inline typename tools::promote_args::type + diff --git a/include/boost/math/special_functions/binomial.hpp b/include/boost/math/special_functions/binomial.hpp index 74f8da018..d394b0488 100644 --- a/include/boost/math/special_functions/binomial.hpp +++ b/include/boost/math/special_functions/binomial.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SF_BINOMIAL_HPP #define BOOST_MATH_SF_BINOMIAL_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -73,3 +77,4 @@ inline T binomial_coefficient(unsigned n, unsigned k) #endif // BOOST_MATH_SF_BINOMIAL_HPP + diff --git a/include/boost/math/special_functions/cbrt.hpp b/include/boost/math/special_functions/cbrt.hpp index d8c9ad4e6..c43f9b625 100644 --- a/include/boost/math/special_functions/cbrt.hpp +++ b/include/boost/math/special_functions/cbrt.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SF_CBRT_HPP #define BOOST_MATH_SF_CBRT_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -70,3 +74,4 @@ inline typename tools::promote_args::type cbrt(T z) + diff --git a/include/boost/math/special_functions/cos_pi.hpp b/include/boost/math/special_functions/cos_pi.hpp index 7196adb90..b79531cb1 100644 --- a/include/boost/math/special_functions/cos_pi.hpp +++ b/include/boost/math/special_functions/cos_pi.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_COS_PI_HPP #define BOOST_MATH_COS_PI_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -51,3 +55,4 @@ inline T cos_pi(T x, const Policy&) } // namespace math } // namespace boost #endif + diff --git a/include/boost/math/special_functions/detail/bessel_i0.hpp b/include/boost/math/special_functions/detail/bessel_i0.hpp index dde226e0f..c8325f093 100644 --- a/include/boost/math/special_functions/detail/bessel_i0.hpp +++ b/include/boost/math/special_functions/detail/bessel_i0.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_I0_HPP #define BOOST_MATH_BESSEL_I0_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -94,3 +98,4 @@ T bessel_i0(T x) }}} // namespaces #endif // BOOST_MATH_BESSEL_I0_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_i1.hpp b/include/boost/math/special_functions/detail/bessel_i1.hpp index 928b47510..9df0e69c4 100644 --- a/include/boost/math/special_functions/detail/bessel_i1.hpp +++ b/include/boost/math/special_functions/detail/bessel_i1.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_I1_HPP #define BOOST_MATH_BESSEL_I1_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -97,3 +101,4 @@ T bessel_i1(T x) }}} // namespaces #endif // BOOST_MATH_BESSEL_I1_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_ik.hpp b/include/boost/math/special_functions/detail/bessel_ik.hpp index c20a6641f..dd51cb6b2 100644 --- a/include/boost/math/special_functions/detail/bessel_ik.hpp +++ b/include/boost/math/special_functions/detail/bessel_ik.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_IK_HPP #define BOOST_MATH_BESSEL_IK_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -329,3 +333,4 @@ int bessel_ik(T v, T x, T* I, T* K, int kind, const Policy& pol) }}} // namespaces #endif // BOOST_MATH_BESSEL_IK_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_j0.hpp b/include/boost/math/special_functions/detail/bessel_j0.hpp index 9191dccb5..59783f620 100644 --- a/include/boost/math/special_functions/detail/bessel_j0.hpp +++ b/include/boost/math/special_functions/detail/bessel_j0.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_J0_HPP #define BOOST_MATH_BESSEL_J0_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -145,3 +149,4 @@ T bessel_j0(T x) }}} // namespaces #endif // BOOST_MATH_BESSEL_J0_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_j1.hpp b/include/boost/math/special_functions/detail/bessel_j1.hpp index 906f2a8a4..ea98bc227 100644 --- a/include/boost/math/special_functions/detail/bessel_j1.hpp +++ b/include/boost/math/special_functions/detail/bessel_j1.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_J1_HPP #define BOOST_MATH_BESSEL_J1_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -150,3 +154,4 @@ T bessel_j1(T x) }}} // namespaces #endif // BOOST_MATH_BESSEL_J1_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_jn.hpp b/include/boost/math/special_functions/detail/bessel_jn.hpp index cf89d28ce..b1f1a0246 100644 --- a/include/boost/math/special_functions/detail/bessel_jn.hpp +++ b/include/boost/math/special_functions/detail/bessel_jn.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_JN_HPP #define BOOST_MATH_BESSEL_JN_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -84,3 +88,4 @@ T bessel_jn(int n, T x, const Policy& pol) }}} // namespaces #endif // BOOST_MATH_BESSEL_JN_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_jy.hpp b/include/boost/math/special_functions/detail/bessel_jy.hpp index 9ef303ec6..e67f753f4 100644 --- a/include/boost/math/special_functions/detail/bessel_jy.hpp +++ b/include/boost/math/special_functions/detail/bessel_jy.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_JY_HPP #define BOOST_MATH_BESSEL_JY_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -359,3 +363,4 @@ int bessel_jy(T v, T x, T* J, T* Y, int kind, const Policy& pol) }} // namespaces #endif // BOOST_MATH_BESSEL_JY_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_jy_asym.hpp b/include/boost/math/special_functions/detail/bessel_jy_asym.hpp index 478c84306..098cb8b14 100644 --- a/include/boost/math/special_functions/detail/bessel_jy_asym.hpp +++ b/include/boost/math/special_functions/detail/bessel_jy_asym.hpp @@ -12,6 +12,10 @@ #ifndef BOOST_MATH_SF_DETAIL_BESSEL_JY_ASYM_HPP #define BOOST_MATH_SF_DETAIL_BESSEL_JY_ASYM_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include namespace boost{ namespace math{ namespace detail{ @@ -295,3 +299,4 @@ T asymptotic_bessel_i_large_x(T v, T x, const Policy& pol) }}} // namespaces #endif + diff --git a/include/boost/math/special_functions/detail/bessel_k0.hpp b/include/boost/math/special_functions/detail/bessel_k0.hpp index a86a055dc..fae03e485 100644 --- a/include/boost/math/special_functions/detail/bessel_k0.hpp +++ b/include/boost/math/special_functions/detail/bessel_k0.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_K0_HPP #define BOOST_MATH_BESSEL_K0_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -114,3 +118,4 @@ T bessel_k0(T x, const Policy& pol) }}} // namespaces #endif // BOOST_MATH_BESSEL_K0_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_k1.hpp b/include/boost/math/special_functions/detail/bessel_k1.hpp index 198c3eb57..5830a7f8f 100644 --- a/include/boost/math/special_functions/detail/bessel_k1.hpp +++ b/include/boost/math/special_functions/detail/bessel_k1.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_K1_HPP #define BOOST_MATH_BESSEL_K1_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -110,3 +114,4 @@ T bessel_k1(T x, const Policy& pol) }}} // namespaces #endif // BOOST_MATH_BESSEL_K1_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_kn.hpp b/include/boost/math/special_functions/detail/bessel_kn.hpp index 8d30462e8..fdee7d44f 100644 --- a/include/boost/math/special_functions/detail/bessel_kn.hpp +++ b/include/boost/math/special_functions/detail/bessel_kn.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_KN_HPP #define BOOST_MATH_BESSEL_KN_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -67,3 +71,4 @@ T bessel_kn(int n, T x, const Policy& pol) }}} // namespaces #endif // BOOST_MATH_BESSEL_KN_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_y0.hpp b/include/boost/math/special_functions/detail/bessel_y0.hpp index 4e6db50dc..d2b65b854 100644 --- a/include/boost/math/special_functions/detail/bessel_y0.hpp +++ b/include/boost/math/special_functions/detail/bessel_y0.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_Y0_HPP #define BOOST_MATH_BESSEL_Y0_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -175,3 +179,4 @@ T bessel_y0(T x, const Policy& pol) }}} // namespaces #endif // BOOST_MATH_BESSEL_Y0_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_y1.hpp b/include/boost/math/special_functions/detail/bessel_y1.hpp index de0bef519..e8372eee4 100644 --- a/include/boost/math/special_functions/detail/bessel_y1.hpp +++ b/include/boost/math/special_functions/detail/bessel_y1.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_Y1_HPP #define BOOST_MATH_BESSEL_Y1_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -148,3 +152,4 @@ T bessel_y1(T x, const Policy& pol) }}} // namespaces #endif // BOOST_MATH_BESSEL_Y1_HPP + diff --git a/include/boost/math/special_functions/detail/bessel_yn.hpp b/include/boost/math/special_functions/detail/bessel_yn.hpp index 3ae9d12c5..e0788f844 100644 --- a/include/boost/math/special_functions/detail/bessel_yn.hpp +++ b/include/boost/math/special_functions/detail/bessel_yn.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_BESSEL_YN_HPP #define BOOST_MATH_BESSEL_YN_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -77,3 +81,4 @@ T bessel_yn(int n, T x, const Policy& pol) }}} // namespaces #endif // BOOST_MATH_BESSEL_YN_HPP + diff --git a/include/boost/math/special_functions/detail/erf_inv.hpp b/include/boost/math/special_functions/detail/erf_inv.hpp index 5d3afe5d8..3b0a175aa 100644 --- a/include/boost/math/special_functions/detail/erf_inv.hpp +++ b/include/boost/math/special_functions/detail/erf_inv.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SF_ERF_INV_HPP #define BOOST_MATH_SF_ERF_INV_HPP +#ifdef _MSC_VER +#pragma once +#endif + namespace boost{ namespace math{ namespace detail{ @@ -462,3 +466,4 @@ inline typename tools::promote_args::type erf_inv(T z) } // namespace boost #endif // BOOST_MATH_SF_ERF_INV_HPP + diff --git a/include/boost/math/special_functions/detail/gamma_inva.hpp b/include/boost/math/special_functions/detail/gamma_inva.hpp index 38f554f0a..db58d64d4 100644 --- a/include/boost/math/special_functions/detail/gamma_inva.hpp +++ b/include/boost/math/special_functions/detail/gamma_inva.hpp @@ -13,6 +13,10 @@ #ifndef BOOST_MATH_SP_DETAIL_GAMMA_INVA #define BOOST_MATH_SP_DETAIL_GAMMA_INVA +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -176,3 +180,4 @@ inline T gamma_q_inva(T x, T q) #endif // BOOST_MATH_SP_DETAIL_GAMMA_INVA + diff --git a/include/boost/math/special_functions/detail/ibeta_inv_ab.hpp b/include/boost/math/special_functions/detail/ibeta_inv_ab.hpp index 1086aff3d..8215a53ef 100644 --- a/include/boost/math/special_functions/detail/ibeta_inv_ab.hpp +++ b/include/boost/math/special_functions/detail/ibeta_inv_ab.hpp @@ -13,6 +13,10 @@ #ifndef BOOST_MATH_SP_DETAIL_BETA_INV_AB #define BOOST_MATH_SP_DETAIL_BETA_INV_AB +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -209,3 +213,4 @@ inline T ibetac_invb(T b, T x, T q) #endif // BOOST_MATH_SP_DETAIL_BETA_INV_AB + diff --git a/include/boost/math/special_functions/detail/ibeta_inverse.hpp b/include/boost/math/special_functions/detail/ibeta_inverse.hpp index bf1fe189f..04898db87 100644 --- a/include/boost/math/special_functions/detail/ibeta_inverse.hpp +++ b/include/boost/math/special_functions/detail/ibeta_inverse.hpp @@ -7,6 +7,10 @@ #ifndef BOOST_MATH_SPECIAL_FUNCTIONS_IBETA_INVERSE_HPP #define BOOST_MATH_SPECIAL_FUNCTIONS_IBETA_INVERSE_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -932,3 +936,4 @@ inline typename tools::promote_args::type + diff --git a/include/boost/math/special_functions/detail/igamma_inverse.hpp b/include/boost/math/special_functions/detail/igamma_inverse.hpp index 8fd564faa..ff182bb2d 100644 --- a/include/boost/math/special_functions/detail/igamma_inverse.hpp +++ b/include/boost/math/special_functions/detail/igamma_inverse.hpp @@ -6,11 +6,15 @@ #ifndef BOOST_MATH_SPECIAL_FUNCTIONS_IGAMMA_INVERSE_HPP #define BOOST_MATH_SPECIAL_FUNCTIONS_IGAMMA_INVERSE_HPP +#ifdef _MSC_VER +#pragma once +#endif + +#include #include #include #include #include -#include namespace boost{ namespace math{ @@ -464,3 +468,4 @@ inline typename tools::promote_args::type #endif // BOOST_MATH_SPECIAL_FUNCTIONS_IGAMMA_INVERSE_HPP + diff --git a/include/boost/math/special_functions/detail/igamma_large.hpp b/include/boost/math/special_functions/detail/igamma_large.hpp index 539489a57..f3de0df03 100644 --- a/include/boost/math/special_functions/detail/igamma_large.hpp +++ b/include/boost/math/special_functions/detail/igamma_large.hpp @@ -45,6 +45,10 @@ #ifndef BOOST_MATH_DETAIL_IGAMMA_LARGE #define BOOST_MATH_DETAIL_IGAMMA_LARGE +#ifdef _MSC_VER +#pragma once +#endif + namespace boost{ namespace math{ namespace detail{ // This version will never be called (at runtime), it's a stub used @@ -762,3 +766,4 @@ T igamma_temme_large(T a, T x, const Policy& pol, mpl::int_<113> const *) #endif // BOOST_MATH_DETAIL_IGAMMA_LARGE + diff --git a/include/boost/math/special_functions/detail/lgamma_small.hpp b/include/boost/math/special_functions/detail/lgamma_small.hpp index c112c2784..161bf9fb6 100644 --- a/include/boost/math/special_functions/detail/lgamma_small.hpp +++ b/include/boost/math/special_functions/detail/lgamma_small.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SPECIAL_FUNCTIONS_DETAIL_LGAMMA_SMALL #define BOOST_MATH_SPECIAL_FUNCTIONS_DETAIL_LGAMMA_SMALL +#ifdef _MSC_VER +#pragma once +#endif + namespace boost{ namespace math{ namespace detail{ // @@ -505,3 +509,4 @@ T lgamma_small_imp(T z, T zm1, T zm2, const mpl::int_<0>&, const Policy& pol, co }}} // namespaces #endif // BOOST_MATH_SPECIAL_FUNCTIONS_DETAIL_LGAMMA_SMALL + diff --git a/include/boost/math/special_functions/detail/simple_complex.hpp b/include/boost/math/special_functions/detail/simple_complex.hpp index e01cf5efb..5a1568e43 100644 --- a/include/boost/math/special_functions/detail/simple_complex.hpp +++ b/include/boost/math/special_functions/detail/simple_complex.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SF_DETAIL_SIMPLE_COMPLEX_HPP #define BOOST_MATH_SF_DETAIL_SIMPLE_COMPLEX_HPP +#ifdef _MSC_VER +#pragma once +#endif + namespace boost{ namespace math{ namespace detail{ namespace sc{ template @@ -165,3 +169,4 @@ inline T abs(const simple_complex& c) #endif + diff --git a/include/boost/math/special_functions/detail/t_distribution_inv.hpp b/include/boost/math/special_functions/detail/t_distribution_inv.hpp index 2af3cb957..f00b24669 100644 --- a/include/boost/math/special_functions/detail/t_distribution_inv.hpp +++ b/include/boost/math/special_functions/detail/t_distribution_inv.hpp @@ -7,6 +7,10 @@ #ifndef BOOST_MATH_SF_DETAIL_INV_T_HPP #define BOOST_MATH_SF_DETAIL_INV_T_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include namespace boost{ namespace math{ namespace detail{ @@ -507,3 +511,4 @@ inline T fast_students_t_quantile(T df, T p, const Policy& pol) #endif // BOOST_MATH_SF_DETAIL_INV_T_HPP + diff --git a/include/boost/math/special_functions/detail/unchecked_factorial.hpp b/include/boost/math/special_functions/detail/unchecked_factorial.hpp index 04dcfcb64..6eca089fd 100644 --- a/include/boost/math/special_functions/detail/unchecked_factorial.hpp +++ b/include/boost/math/special_functions/detail/unchecked_factorial.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SP_UC_FACTORIALS_HPP #define BOOST_MATH_SP_UC_FACTORIALS_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #ifdef BOOST_MSVC #pragma warning(push) // Temporary until lexical cast fixed. @@ -395,3 +399,4 @@ struct max_factorial } // namespace boost #endif // BOOST_MATH_SP_UC_FACTORIALS_HPP + diff --git a/include/boost/math/special_functions/digamma.hpp b/include/boost/math/special_functions/digamma.hpp index 12946cec7..a1008d2bb 100644 --- a/include/boost/math/special_functions/digamma.hpp +++ b/include/boost/math/special_functions/digamma.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SF_DIGAMMA_HPP #define BOOST_MATH_SF_DIGAMMA_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -443,3 +447,4 @@ inline typename tools::promote_args::type } // namespace math } // namespace boost #endif + diff --git a/include/boost/math/special_functions/ellint_1.hpp b/include/boost/math/special_functions/ellint_1.hpp index 8b10cf044..9de2f66f6 100644 --- a/include/boost/math/special_functions/ellint_1.hpp +++ b/include/boost/math/special_functions/ellint_1.hpp @@ -14,6 +14,10 @@ #ifndef BOOST_MATH_ELLINT_1_HPP #define BOOST_MATH_ELLINT_1_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -180,3 +184,4 @@ inline typename tools::promote_args::type ellint_1(T1 k, T2 phi) }} // namespaces #endif // BOOST_MATH_ELLINT_1_HPP + diff --git a/include/boost/math/special_functions/ellint_2.hpp b/include/boost/math/special_functions/ellint_2.hpp index 341fd8be3..182157833 100644 --- a/include/boost/math/special_functions/ellint_2.hpp +++ b/include/boost/math/special_functions/ellint_2.hpp @@ -14,6 +14,10 @@ #ifndef BOOST_MATH_ELLINT_2_HPP #define BOOST_MATH_ELLINT_2_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -161,3 +165,4 @@ inline typename tools::promote_args::type ellint_2(T1 k, T2 phi, const P }} // namespaces #endif // BOOST_MATH_ELLINT_2_HPP + diff --git a/include/boost/math/special_functions/ellint_3.hpp b/include/boost/math/special_functions/ellint_3.hpp index ee5aa8359..d60fa822d 100644 --- a/include/boost/math/special_functions/ellint_3.hpp +++ b/include/boost/math/special_functions/ellint_3.hpp @@ -14,6 +14,10 @@ #ifndef BOOST_MATH_ELLINT_3_HPP #define BOOST_MATH_ELLINT_3_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -325,3 +329,4 @@ inline typename tools::promote_args::type ellint_3(T1 k, T2 v) }} // namespaces #endif // BOOST_MATH_ELLINT_3_HPP + diff --git a/include/boost/math/special_functions/ellint_rc.hpp b/include/boost/math/special_functions/ellint_rc.hpp index ace2851b3..c78d4d450 100644 --- a/include/boost/math/special_functions/ellint_rc.hpp +++ b/include/boost/math/special_functions/ellint_rc.hpp @@ -13,6 +13,10 @@ #ifndef BOOST_MATH_ELLINT_RC_HPP #define BOOST_MATH_ELLINT_RC_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -108,3 +112,4 @@ inline typename tools::promote_args::type }} // namespaces #endif // BOOST_MATH_ELLINT_RC_HPP + diff --git a/include/boost/math/special_functions/ellint_rd.hpp b/include/boost/math/special_functions/ellint_rd.hpp index 0a8f946c1..639a05ab8 100644 --- a/include/boost/math/special_functions/ellint_rd.hpp +++ b/include/boost/math/special_functions/ellint_rd.hpp @@ -11,6 +11,10 @@ #ifndef BOOST_MATH_ELLINT_RD_HPP #define BOOST_MATH_ELLINT_RD_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -123,3 +127,4 @@ inline typename tools::promote_args::type }} // namespaces #endif // BOOST_MATH_ELLINT_RD_HPP + diff --git a/include/boost/math/special_functions/ellint_rf.hpp b/include/boost/math/special_functions/ellint_rf.hpp index f573b21c7..6be76d876 100644 --- a/include/boost/math/special_functions/ellint_rf.hpp +++ b/include/boost/math/special_functions/ellint_rf.hpp @@ -12,6 +12,10 @@ #ifndef BOOST_MATH_ELLINT_RF_HPP #define BOOST_MATH_ELLINT_RF_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -125,3 +129,4 @@ inline typename tools::promote_args::type }} // namespaces #endif // BOOST_MATH_ELLINT_RF_HPP + diff --git a/include/boost/math/special_functions/ellint_rj.hpp b/include/boost/math/special_functions/ellint_rj.hpp index 7adc67671..48a0fc61a 100644 --- a/include/boost/math/special_functions/ellint_rj.hpp +++ b/include/boost/math/special_functions/ellint_rj.hpp @@ -13,6 +13,10 @@ #ifndef BOOST_MATH_ELLINT_RJ_HPP #define BOOST_MATH_ELLINT_RJ_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -172,3 +176,4 @@ inline typename tools::promote_args::type }} // namespaces #endif // BOOST_MATH_ELLINT_RJ_HPP + diff --git a/include/boost/math/special_functions/erf.hpp b/include/boost/math/special_functions/erf.hpp index 3e1894dec..99c8bfd03 100644 --- a/include/boost/math/special_functions/erf.hpp +++ b/include/boost/math/special_functions/erf.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SPECIAL_ERF_HPP #define BOOST_MATH_SPECIAL_ERF_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -856,3 +860,4 @@ inline typename tools::promote_args::type erfc(T z) + diff --git a/include/boost/math/special_functions/expint.hpp b/include/boost/math/special_functions/expint.hpp index e99543536..71b851185 100644 --- a/include/boost/math/special_functions/expint.hpp +++ b/include/boost/math/special_functions/expint.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_EXPINT_HPP #define BOOST_MATH_EXPINT_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -432,7 +436,7 @@ T expint_imp(unsigned n, T z, const Policy& pol, const Tag& tag) if(z < 0) return policies::raise_domain_error(function, "Function requires z >= 0 but got %1%.", z, pol); if(z == 0) - return n == 1 ? policies::raise_overflow_error(function, 0, pol) : 1 / (n - 1); + return n == 1 ? policies::raise_overflow_error(function, 0, pol) : 1 / (static_cast(n - 1)); T result; @@ -1489,7 +1493,7 @@ inline typename tools::promote_args::type template inline typename detail::expint_result::type - expint(T const& z, U const& u) + expint(T const z, U const u) { typedef typename policies::is_policy::type tag_type; return detail::expint_forwarder(z, u, tag_type()); @@ -1506,3 +1510,4 @@ inline typename tools::promote_args::type #endif // BOOST_MATH_EXPINT_HPP + diff --git a/include/boost/math/special_functions/expm1.hpp b/include/boost/math/special_functions/expm1.hpp index cb88a18d1..7f83e559e 100644 --- a/include/boost/math/special_functions/expm1.hpp +++ b/include/boost/math/special_functions/expm1.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_EXPM1_INCLUDED #define BOOST_MATH_EXPM1_INCLUDED +#ifdef _MSC_VER +#pragma once +#endif + #include #include // platform's ::expm1 #include @@ -267,3 +271,4 @@ inline long double expm1(long double z) #endif // BOOST_MATH_HYPOT_INCLUDED + diff --git a/include/boost/math/special_functions/factorials.hpp b/include/boost/math/special_functions/factorials.hpp index 8bb640d1d..5c36f5c4d 100644 --- a/include/boost/math/special_functions/factorials.hpp +++ b/include/boost/math/special_functions/factorials.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SP_FACTORIALS_HPP #define BOOST_MATH_SP_FACTORIALS_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -222,3 +226,4 @@ inline typename tools::promote_args::type } // namespace boost #endif // BOOST_MATH_SP_FACTORIALS_HPP + diff --git a/include/boost/math/special_functions/fpclassify.hpp b/include/boost/math/special_functions/fpclassify.hpp index 996c8cb0c..135ad729f 100644 --- a/include/boost/math/special_functions/fpclassify.hpp +++ b/include/boost/math/special_functions/fpclassify.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_FPCLASSIFY_HPP #define BOOST_MATH_FPCLASSIFY_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -238,3 +242,4 @@ inline bool isnormal BOOST_NO_MACRO_EXPAND(T t) + diff --git a/include/boost/math/special_functions/gamma.hpp b/include/boost/math/special_functions/gamma.hpp index 11706ad38..cf185cada 100644 --- a/include/boost/math/special_functions/gamma.hpp +++ b/include/boost/math/special_functions/gamma.hpp @@ -8,6 +8,10 @@ #ifndef BOOST_MATH_SF_GAMMA_HPP #define BOOST_MATH_SF_GAMMA_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #ifdef BOOST_MSVC # pragma warning(push) @@ -1469,3 +1473,4 @@ inline typename tools::promote_args::type + diff --git a/include/boost/math/special_functions/hermite.hpp b/include/boost/math/special_functions/hermite.hpp index 39c297a5b..1221f414d 100644 --- a/include/boost/math/special_functions/hermite.hpp +++ b/include/boost/math/special_functions/hermite.hpp @@ -7,6 +7,10 @@ #ifndef BOOST_MATH_SPECIAL_HERMITE_HPP #define BOOST_MATH_SPECIAL_HERMITE_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -69,3 +73,4 @@ inline typename tools::promote_args::type #endif // BOOST_MATH_SPECIAL_HERMITE_HPP + diff --git a/include/boost/math/special_functions/hypot.hpp b/include/boost/math/special_functions/hypot.hpp index ba97b9937..c182ada83 100644 --- a/include/boost/math/special_functions/hypot.hpp +++ b/include/boost/math/special_functions/hypot.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_HYPOT_INCLUDED #define BOOST_MATH_HYPOT_INCLUDED +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -79,3 +83,4 @@ inline typename tools::promote_args::type #endif // BOOST_MATH_HYPOT_INCLUDED + diff --git a/include/boost/math/special_functions/laguerre.hpp b/include/boost/math/special_functions/laguerre.hpp index d41eafaad..070927f26 100644 --- a/include/boost/math/special_functions/laguerre.hpp +++ b/include/boost/math/special_functions/laguerre.hpp @@ -7,6 +7,10 @@ #ifndef BOOST_MATH_SPECIAL_LAGUERRE_HPP #define BOOST_MATH_SPECIAL_LAGUERRE_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -132,3 +136,4 @@ inline typename laguerre_result::type #endif // BOOST_MATH_SPECIAL_LAGUERRE_HPP + diff --git a/include/boost/math/special_functions/lanczos.hpp b/include/boost/math/special_functions/lanczos.hpp index 2f984f615..730bb0bc0 100644 --- a/include/boost/math/special_functions/lanczos.hpp +++ b/include/boost/math/special_functions/lanczos.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SPECIAL_FUNCTIONS_LANCZOS #define BOOST_MATH_SPECIAL_FUNCTIONS_LANCZOS +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -1229,3 +1233,4 @@ struct lanczos + diff --git a/include/boost/math/special_functions/legendre.hpp b/include/boost/math/special_functions/legendre.hpp index 019df1ed1..074383ddb 100644 --- a/include/boost/math/special_functions/legendre.hpp +++ b/include/boost/math/special_functions/legendre.hpp @@ -7,6 +7,10 @@ #ifndef BOOST_MATH_SPECIAL_LEGENDRE_HPP #define BOOST_MATH_SPECIAL_LEGENDRE_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -187,3 +191,4 @@ inline typename tools::promote_args::type #endif // BOOST_MATH_SPECIAL_LEGENDRE_HPP + diff --git a/include/boost/math/special_functions/log1p.hpp b/include/boost/math/special_functions/log1p.hpp index d5d95eec6..0e093a618 100644 --- a/include/boost/math/special_functions/log1p.hpp +++ b/include/boost/math/special_functions/log1p.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_LOG1P_INCLUDED #define BOOST_MATH_LOG1P_INCLUDED +#ifdef _MSC_VER +#pragma once +#endif + #include #include // platform's ::log1p #include @@ -275,3 +279,4 @@ inline T log1pmx(T x) #endif // BOOST_MATH_LOG1P_INCLUDED + diff --git a/include/boost/math/special_functions/math_fwd.hpp b/include/boost/math/special_functions/math_fwd.hpp index db7776b7a..9db063e8a 100644 --- a/include/boost/math/special_functions/math_fwd.hpp +++ b/include/boost/math/special_functions/math_fwd.hpp @@ -19,6 +19,10 @@ #ifndef BOOST_MATH_SPECIAL_MATH_FWD_HPP #define BOOST_MATH_SPECIAL_MATH_FWD_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include // for argument promotion. #include #include @@ -640,7 +644,7 @@ namespace boost typename tools::promote_args::type expint(unsigned n, T z, const Policy&); template - typename detail::expint_result::type expint(T const& z, U const& u); + typename detail::expint_result::type expint(T const z, U const u); template typename tools::promote_args::type expint(T z); @@ -952,3 +956,4 @@ namespace boost #endif // BOOST_MATH_SPECIAL_MATH_FWD_HPP + diff --git a/include/boost/math/special_functions/powm1.hpp b/include/boost/math/special_functions/powm1.hpp index dd1467d42..cb33ae03d 100644 --- a/include/boost/math/special_functions/powm1.hpp +++ b/include/boost/math/special_functions/powm1.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_POWM1 #define BOOST_MATH_POWM1 +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -54,3 +58,4 @@ inline typename tools::promote_args::type + diff --git a/include/boost/math/special_functions/sign.hpp b/include/boost/math/special_functions/sign.hpp index dd4cb8618..7ff450422 100644 --- a/include/boost/math/special_functions/sign.hpp +++ b/include/boost/math/special_functions/sign.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_SIGN_HPP #define BOOST_MATH_TOOLS_SIGN_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -36,3 +40,4 @@ inline T copysign BOOST_NO_MACRO_EXPAND(const T& x, const T& y) #endif // BOOST_MATH_TOOLS_SIGN_HPP + diff --git a/include/boost/math/special_functions/sin_pi.hpp b/include/boost/math/special_functions/sin_pi.hpp index d4c6296a7..ac79fe0a5 100644 --- a/include/boost/math/special_functions/sin_pi.hpp +++ b/include/boost/math/special_functions/sin_pi.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SIN_PI_HPP #define BOOST_MATH_SIN_PI_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -53,3 +57,4 @@ inline T sin_pi(T x, const Policy&) } // namespace math } // namespace boost #endif + diff --git a/include/boost/math/special_functions/sinc.hpp b/include/boost/math/special_functions/sinc.hpp index 507d45d74..8c1247a6d 100644 --- a/include/boost/math/special_functions/sinc.hpp +++ b/include/boost/math/special_functions/sinc.hpp @@ -11,6 +11,10 @@ #define BOOST_SINC_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -170,3 +174,4 @@ namespace boost } #endif /* BOOST_SINC_HPP */ + diff --git a/include/boost/math/special_functions/sinhc.hpp b/include/boost/math/special_functions/sinhc.hpp index a7f87b9d7..143eb5cf8 100644 --- a/include/boost/math/special_functions/sinhc.hpp +++ b/include/boost/math/special_functions/sinhc.hpp @@ -11,6 +11,10 @@ #define BOOST_SINHC_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -161,3 +165,4 @@ namespace boost } #endif /* BOOST_SINHC_HPP */ + diff --git a/include/boost/math/special_functions/spherical_harmonic.hpp b/include/boost/math/special_functions/spherical_harmonic.hpp index fae32ad97..bd0c7eef0 100644 --- a/include/boost/math/special_functions/spherical_harmonic.hpp +++ b/include/boost/math/special_functions/spherical_harmonic.hpp @@ -7,6 +7,10 @@ #ifndef BOOST_MATH_SPECIAL_SPHERICAL_HARMONIC_HPP #define BOOST_MATH_SPECIAL_SPHERICAL_HARMONIC_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -197,3 +201,4 @@ inline typename tools::promote_args::type #endif // BOOST_MATH_SPECIAL_SPHERICAL_HARMONIC_HPP + diff --git a/include/boost/math/special_functions/sqrt1pm1.hpp b/include/boost/math/special_functions/sqrt1pm1.hpp index ea4929e1f..ad0203e72 100644 --- a/include/boost/math/special_functions/sqrt1pm1.hpp +++ b/include/boost/math/special_functions/sqrt1pm1.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_SQRT1PM1 #define BOOST_MATH_SQRT1PM1 +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -41,3 +45,4 @@ inline typename tools::promote_args::type sqrt1pm1(const T& val) + diff --git a/include/boost/math/special_functions/zeta.hpp b/include/boost/math/special_functions/zeta.hpp index bd795787f..7e2ac109d 100644 --- a/include/boost/math/special_functions/zeta.hpp +++ b/include/boost/math/special_functions/zeta.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_ZETA_HPP #define BOOST_MATH_ZETA_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -896,3 +900,4 @@ inline typename tools::promote_args::type zeta(T s) #endif // BOOST_MATH_ZETA_HPP + diff --git a/include/boost/math/tools/config.hpp b/include/boost/math/tools/config.hpp index ba66507d2..8e033b97c 100644 --- a/include/boost/math/tools/config.hpp +++ b/include/boost/math/tools/config.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_CONFIG_HPP #define BOOST_MATH_TOOLS_CONFIG_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include // for boost::uintmax_t #include #include @@ -245,3 +249,4 @@ inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c, T d) + diff --git a/include/boost/math/tools/fraction.hpp b/include/boost/math/tools/fraction.hpp index f5b3df5a4..344012d3b 100644 --- a/include/boost/math/tools/fraction.hpp +++ b/include/boost/math/tools/fraction.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_FRACTION_INCLUDED #define BOOST_MATH_TOOLS_FRACTION_INCLUDED +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -257,3 +261,4 @@ typename detail::fraction_traits::result_type continued_fraction_a(Gen& g, } // namespace boost #endif // BOOST_MATH_TOOLS_FRACTION_INCLUDED + diff --git a/include/boost/math/tools/minima.hpp b/include/boost/math/tools/minima.hpp index 14ec95795..94c5de3c4 100644 --- a/include/boost/math/tools/minima.hpp +++ b/include/boost/math/tools/minima.hpp @@ -7,6 +7,10 @@ #ifndef BOOST_MATH_TOOLS_MINIMA_HPP #define BOOST_MATH_TOOLS_MINIMA_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -145,3 +149,4 @@ inline std::pair brent_find_minima(F f, T min, T max, int digits) + diff --git a/include/boost/math/tools/polynomial.hpp b/include/boost/math/tools/polynomial.hpp index a1c2defdf..6ec66ee37 100644 --- a/include/boost/math/tools/polynomial.hpp +++ b/include/boost/math/tools/polynomial.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_POLYNOMIAL_HPP #define BOOST_MATH_TOOLS_POLYNOMIAL_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -313,3 +317,4 @@ inline std::basic_ostream& operator << (std::basic_ostream #include #include @@ -233,3 +237,4 @@ inline T epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) } // namespace boost #endif // BOOST_MATH_TOOLS_PRECISION_INCLUDED + diff --git a/include/boost/math/tools/promotion.hpp b/include/boost/math/tools/promotion.hpp index 913574b31..e2e6fd1cc 100644 --- a/include/boost/math/tools/promotion.hpp +++ b/include/boost/math/tools/promotion.hpp @@ -18,6 +18,10 @@ #ifndef BOOST_MATH_PROMOTION_HPP #define BOOST_MATH_PROMOTION_HPP +#ifdef _MSC_VER +#pragma once +#endif + // Boost type traits: #include #include // for boost::is_floating_point; @@ -118,3 +122,4 @@ namespace boost } // namespace boost #endif // BOOST_MATH_PROMOTION_HPP + diff --git a/include/boost/math/tools/rational.hpp b/include/boost/math/tools/rational.hpp index 81c348af5..59cb5b7e0 100644 --- a/include/boost/math/tools/rational.hpp +++ b/include/boost/math/tools/rational.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_RATIONAL_HPP #define BOOST_MATH_TOOLS_RATIONAL_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -204,3 +208,4 @@ inline V evaluate_rational(const boost::array& a, const boost::array& + diff --git a/include/boost/math/tools/real_cast.hpp b/include/boost/math/tools/real_cast.hpp index 7334cd460..9b854e301 100644 --- a/include/boost/math/tools/real_cast.hpp +++ b/include/boost/math/tools/real_cast.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_REAL_CAST_HPP #define BOOST_MATH_TOOLS_REAL_CAST_HPP +#ifdef _MSC_VER +#pragma once +#endif + namespace boost{ namespace math { namespace tools @@ -22,3 +26,4 @@ namespace boost{ namespace math #endif // BOOST_MATH_TOOLS_REAL_CAST_HPP + diff --git a/include/boost/math/tools/remez.hpp b/include/boost/math/tools/remez.hpp index e02183332..afcbe25af 100644 --- a/include/boost/math/tools/remez.hpp +++ b/include/boost/math/tools/remez.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_REMEZ_HPP #define BOOST_MATH_TOOLS_REMEZ_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -660,3 +664,4 @@ polynomial remez_minimax::denominator()const #endif // BOOST_MATH_TOOLS_REMEZ_HPP + diff --git a/include/boost/math/tools/roots.hpp b/include/boost/math/tools/roots.hpp index b36b051c8..a4be4ae35 100644 --- a/include/boost/math/tools/roots.hpp +++ b/include/boost/math/tools/roots.hpp @@ -6,10 +6,15 @@ #ifndef BOOST_MATH_TOOLS_NEWTON_SOLVER_HPP #define BOOST_MATH_TOOLS_NEWTON_SOLVER_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include +#include #include #include #include @@ -515,3 +520,4 @@ inline T schroeder_iterate(F f, T guess, T min, T max, int digits) #endif // BOOST_MATH_TOOLS_NEWTON_SOLVER_HPP + diff --git a/include/boost/math/tools/series.hpp b/include/boost/math/tools/series.hpp index 94f264de8..f5f659d24 100644 --- a/include/boost/math/tools/series.hpp +++ b/include/boost/math/tools/series.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_SERIES_INCLUDED #define BOOST_MATH_TOOLS_SERIES_INCLUDED +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -169,3 +173,4 @@ typename Functor::result_type kahan_sum_series(Functor& func, int bits, boost::u } // namespace boost #endif // BOOST_MATH_TOOLS_SERIES_INCLUDED + diff --git a/include/boost/math/tools/solve.hpp b/include/boost/math/tools/solve.hpp index 9683ad561..64b01e521 100644 --- a/include/boost/math/tools/solve.hpp +++ b/include/boost/math/tools/solve.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_SOLVE_HPP #define BOOST_MATH_TOOLS_SOLVE_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include @@ -72,3 +76,4 @@ boost::numeric::ublas::vector solve( #endif // BOOST_MATH_TOOLS_SOLVE_HPP + diff --git a/include/boost/math/tools/stats.hpp b/include/boost/math/tools/stats.hpp index e9e55456f..bbc1c44eb 100644 --- a/include/boost/math/tools/stats.hpp +++ b/include/boost/math/tools/stats.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_STATS_INCLUDED #define BOOST_MATH_TOOLS_STATS_INCLUDED +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -81,3 +85,4 @@ private: } // namespace boost #endif + diff --git a/include/boost/math/tools/test.hpp b/include/boost/math/tools/test.hpp index 3000e0818..2dfd31425 100644 --- a/include/boost/math/tools/test.hpp +++ b/include/boost/math/tools/test.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_TEST_HPP #define BOOST_MATH_TOOLS_TEST_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -240,3 +244,4 @@ test_result::value_type> test(const A& a, F1 t #endif + diff --git a/include/boost/math/tools/test_data.hpp b/include/boost/math/tools/test_data.hpp index f74b65af5..ab9a05761 100644 --- a/include/boost/math/tools/test_data.hpp +++ b/include/boost/math/tools/test_data.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_TEST_DATA_HPP #define BOOST_MATH_TOOLS_TEST_DATA_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #ifdef BOOST_MSVC @@ -753,3 +757,4 @@ std::ostream& write_code(std::ostream& os, #endif // BOOST_MATH_TOOLS_TEST_DATA_HPP + diff --git a/include/boost/math/tools/toms748_solve.hpp b/include/boost/math/tools/toms748_solve.hpp index b52c4ba9f..6b9dc0631 100644 --- a/include/boost/math/tools/toms748_solve.hpp +++ b/include/boost/math/tools/toms748_solve.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_SOLVE_ROOT_HPP #define BOOST_MATH_TOOLS_SOLVE_ROOT_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include #include #include @@ -577,3 +581,4 @@ inline std::pair bracket_and_solve_root(F f, const T& guess, const T& fact #endif // BOOST_MATH_TOOLS_SOLVE_ROOT_HPP + diff --git a/include/boost/math/tools/traits.hpp b/include/boost/math/tools/traits.hpp index 766ea31f0..95cda3acb 100644 --- a/include/boost/math/tools/traits.hpp +++ b/include/boost/math/tools/traits.hpp @@ -21,6 +21,10 @@ as defined above, and has member functions "scale" and "location". #ifndef BOOST_STATS_IS_DISTRIBUTION_HPP #define BOOST_STATS_IS_DISTRIBUTION_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include // should be the last #include #include @@ -104,3 +108,4 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_scaled_distribution,T,::boost::math::tools::deta #endif + diff --git a/include/boost/math/tools/user.hpp b/include/boost/math/tools/user.hpp index bcf78b389..c1bdaf7d8 100644 --- a/include/boost/math/tools/user.hpp +++ b/include/boost/math/tools/user.hpp @@ -9,6 +9,10 @@ #ifndef BOOST_MATH_TOOLS_USER_HPP #define BOOST_MATH_TOOLS_USER_HPP +#ifdef _MSC_VER +#pragma once +#endif + // This file can be modified by the user to change the default policies. // See "Changing the Policy Defaults" in documentation. @@ -90,3 +94,4 @@ #endif // BOOST_MATH_TOOLS_USER_HPP + diff --git a/include/boost/math/tools/workaround.hpp b/include/boost/math/tools/workaround.hpp index 4e0035f8e..20106814c 100644 --- a/include/boost/math/tools/workaround.hpp +++ b/include/boost/math/tools/workaround.hpp @@ -6,6 +6,10 @@ #ifndef BOOST_MATH_TOOLS_WORHAROUND_HPP #define BOOST_MATH_TOOLS_WORHAROUND_HPP +#ifdef _MSC_VER +#pragma once +#endif + #include namespace boost{ namespace math{ namespace tools{ @@ -31,3 +35,4 @@ inline long double fmod_workaround(long double a, long double b) }}} // namespaces #endif // BOOST_MATH_TOOLS_WORHAROUND_HPP + diff --git a/test/test_expint.cpp b/test/test_expint.cpp index df8ef413b..84ff649b5 100644 --- a/test/test_expint.cpp +++ b/test/test_expint.cpp @@ -15,6 +15,7 @@ #include "functor.hpp" #include "handle_test_result.hpp" +#include "test_expint_hooks.hpp" // // DESCRIPTION: @@ -72,6 +73,16 @@ void expected_results() "float|double|long double", // test type(s) ".*Ei.*", // test data group ".*", 6, 3); // test function + if(std::numeric_limits::digits > 100) + { + add_expected_result( + ".*", // compiler + ".*", // stdlib + ".*", // platform + "real_concept", // test type(s) + ".*Ei.*", // test data group + ".*", 150, 50); // test function + } add_expected_result( ".*", // compiler ".*", // stdlib @@ -85,7 +96,7 @@ void expected_results() ".*", // platform ".*", // test type(s) ".*", // test data group - ".*", 20, 5); // test function + ".*", 25, 5); // test function std::cout << "Tests run with " << BOOST_COMPILER << ", " << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl; @@ -98,6 +109,14 @@ T expint_wrapper(T n, T z) boost::math::tools::real_cast(n), z); } +#ifdef TEST_OTHER +template +T other_expint_wrapper(T n, T z) +{ + return other::expint( + boost::math::tools::real_cast(n), z); +} +#endif template void do_test_expint(const T& data, const char* type_name, const char* test_name) { @@ -122,7 +141,20 @@ void do_test_expint(const T& data, const char* type_name, const char* test_name) bind_func(funcp, 0, 1), extract_result(2)); handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::expint", test_name); - +#ifdef TEST_OTHER + if(boost::is_floating_point::value && other::expint(2u, 2.0)) + { + funcp = other_expint_wrapper; + // + // test expint against data: + // + result = boost::math::tools::test( + data, + bind_func(funcp, 0, 1), + extract_result(2)); + handle_test_result(result, data[result.worst()], result.worst(), type_name, "other::expint", test_name); + } +#endif std::cout << std::endl; } @@ -150,6 +182,20 @@ void do_test_expint_Ei(const T& data, const char* type_name, const char* test_na bind_func(funcp, 0), extract_result(1)); handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::expint", test_name); +#ifdef TEST_OTHER + if(boost::is_floating_point::value && other::expint(2.0)) + { + funcp = other::expint; + // + // test expint against data: + // + result = boost::math::tools::test( + data, + bind_func(funcp, 0), + extract_result(1)); + handle_test_result(result, data[result.worst()], result.worst(), type_name, "other::expint", test_name); + } +#endif } template diff --git a/test/test_expint_hooks.hpp b/test/test_expint_hooks.hpp new file mode 100644 index 000000000..2f9a83cce --- /dev/null +++ b/test/test_expint_hooks.hpp @@ -0,0 +1,63 @@ +// (C) Copyright John Maddock 2006. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_MATH_TEST_ZETA_OTHER_HOOKS_HPP +#define BOOST_MATH_TEST_ZETA_OTHER_HOOKS_HPP + + +#ifdef TEST_CEPHES +namespace other{ +extern "C" { + double expn(int, double); + float expnf(int, float); + long double expnl(int, long double); +} +inline float expint(unsigned n, float a) +{ return expnf(n, a); } +inline double expint(unsigned n, double a) +{ return expn(n, a); } +inline long double expint(unsigned n, long double a) +{ +#ifdef BOOST_MSVC + return expn(n, (double)a); +#else + return expnl(n, a); +#endif +} +// Ei is not supported: +template +inline T expint(T){ return 0; } +} +#define TEST_OTHER +#endif + +#ifdef TEST_GSL +#include + +namespace other{ +inline float expint(float a) +{ return (float)gsl_sf_expint_Ei(a); } +inline double expint(double a) +{ return gsl_sf_expint_Ei(a); } +inline long double expint(long double a) +{ return gsl_sf_expint_Ei(a); } +// En is not supported: +template +inline T expint(unsigned, T){ return 0; } +} +#define TEST_OTHER +#endif + +#ifdef TEST_OTHER +namespace other{ + boost::math::concepts::real_concept expint(unsigned, boost::math::concepts::real_concept){ return 0; } + boost::math::concepts::real_concept expint(boost::math::concepts::real_concept){ return 0; } +} +#endif + + +#endif + + diff --git a/test/test_zeta.cpp b/test/test_zeta.cpp index 28c9bcf61..6414a3c42 100644 --- a/test/test_zeta.cpp +++ b/test/test_zeta.cpp @@ -15,6 +15,7 @@ #include "functor.hpp" #include "handle_test_result.hpp" +#include "test_zeta_hooks.hpp" // // DESCRIPTION: @@ -115,7 +116,18 @@ void do_test_zeta(const T& data, const char* type_name, const char* test_name) bind_func(funcp, 0), extract_result(1)); handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::zeta", test_name); +#ifdef TEST_OTHER + if(boost::is_floating_point::value) + { + funcp = other::zeta; + result = boost::math::tools::test( + data, + bind_func(funcp, 0), + extract_result(1)); + handle_test_result(result, data[result.worst()], result.worst(), type_name, "other::zeta", test_name); + } +#endif std::cout << std::endl; } template diff --git a/test/test_zeta_hooks.hpp b/test/test_zeta_hooks.hpp new file mode 100644 index 000000000..087d87d3e --- /dev/null +++ b/test/test_zeta_hooks.hpp @@ -0,0 +1,56 @@ +// (C) Copyright John Maddock 2006. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_MATH_TEST_ZETA_OTHER_HOOKS_HPP +#define BOOST_MATH_TEST_ZETA_OTHER_HOOKS_HPP + + +#ifdef TEST_CEPHES +namespace other{ +extern "C" { + double zetac(double); + float zetacf(float); + long double zetacl(long double); +} +inline float zeta(float a) +{ return 1 + zetac(a); } +inline double zeta(double a) +{ return 1 + zetac(a); } +inline long double zeta(long double a) +{ +#ifdef BOOST_MSVC + return 1 + zetac((double)a); +#else + return zetacl(a); +#endif +} +} +#define TEST_OTHER +#endif + +#ifdef TEST_GSL +#include + +namespace other{ +inline float zeta(float a) +{ return (float)gsl_sf_zeta(a); } +inline double zeta(double a) +{ return gsl_sf_zeta(a); } +inline long double zeta(long double a) +{ return gsl_sf_zeta(a); } +} +#define TEST_OTHER +#endif + +#ifdef TEST_OTHER +namespace other{ + boost::math::concepts::real_concept zeta(boost::math::concepts::real_concept){ return 0; } +} +#endif + + +#endif + +