#include #include #include "rqmc.hpp" #include "p_adic.o" double frac_part(double x){ return x - floor(x); } double pos (double x){ return x>0?x:0; } struct asian_option : public std::unary_function, double> { asian_option(double r, double T, double S0, double V, int d, double K) : r(r), T(T), S0(S0), V(V), d(d), K(K) {}; double operator()(std::vector X) const { std::vector S(d); S[0]= S0*exp((r-V*V/2)*(T/d)+V*sqrt(T/d)*X[0]); for(int i=1;i struct quasi_option : public generator { quasi_option(int n, int d, Fct payoff) : n(n), d(d), payoff(payoff), G(d) {}; typename Fct::result_type operator()() { double sum =0; for(int i=0; i G; }; int main(){ init_alea(1); int d = 64; asian_option A(0.05, 1.0, 50., 0.1, d, 45); int N= 10000; int d =16; std::vector result(3); result = monte_carlo(100, quasi_option (N, d, A)); for(int i =0; i<3; i++){ std::cout< result2(3); result = monte_carlo(100, quasi_option (N, d, A)); for(int i =0; i<3; i++){ std::cout<