diff --git a/demo/blackscholes/nt2_merged/blackandscholes_nt2_merged.cpp b/demo/blackscholes/nt2_merged/blackandscholes_nt2_merged.cpp index b44612db70..406e26e45a 100644 --- a/demo/blackscholes/nt2_merged/blackandscholes_nt2_merged.cpp +++ b/demo/blackscholes/nt2_merged/blackandscholes_nt2_merged.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -82,6 +83,9 @@ template struct blackandscholes_nt2_merged Ta.resize(nt2::of_size(size_)); ra.resize(nt2::of_size(size_)); va.resize(nt2::of_size(size_)); + da.resize(nt2::of_size(size_)); + d1.resize(nt2::of_size(size_)); + d2.resize(nt2::of_size(size_)); R.resize(nt2::of_size(size_)); for(std::size_t i = 1; i <= size_; ++i) @@ -90,7 +94,11 @@ template struct blackandscholes_nt2_merged void operator()() { - R = nt2::blackandscholes(Sa, Xa, Ta, ra, va); + nt2::tie(da,d1,d2,R) = nt2::tie ( nt2::sqrt(Ta) + , nt2::log(Sa/Xa) + (nt2::fma(nt2::sqr(va),T(0.5),ra)*Ta)/(va*da) + , nt2::fnms(va,da,d1) + , nt2::fnms(Xa*nt2::exp(-ra*Ta),nt2::fastnormcdf(d2),Sa*nt2::fastnormcdf(d1)) + ); } friend std::ostream& operator<<(std::ostream& os, blackandscholes_nt2_merged const& p) @@ -101,7 +109,7 @@ template struct blackandscholes_nt2_merged std::size_t size() const { return size_; } private: - nt2::table Sa, Xa, Ta, ra, va, R; + nt2::table Sa, Xa, Ta, ra, va, R, da, d1, d2; std::size_t size_; };