diff options
| author | Bertrand <bertrand.horel@gmail.com> | 2016-02-14 18:17:56 +0000 |
|---|---|---|
| committer | Bertrand <bertrand.horel@gmail.com> | 2016-02-14 18:17:56 +0000 |
| commit | 97936197c500283db5e73959ef2d2c69b05a5ac3 (patch) | |
| tree | fdba640cc16df80964d7bd98bc4780544d909e8e | |
| parent | 69d81d75339bc16725346b452ca6e0dc5da89554 (diff) | |
| download | projet_C++-97936197c500283db5e73959ef2d2c69b05a5ac3.tar.gz | |
réécriture avec une structure paramètres
| -rw-r--r-- | option.cpp | 42 |
1 files changed, 19 insertions, 23 deletions
@@ -4,32 +4,33 @@ #include <algorithm> #include <iostream> -double r; -double T; -double S0; -double V; -int d; +struct option_param { + double r; + double T; + double S0; + double V; + int d; +}; -std::vector<double> path_gen(std::vector<double> X){ - d=X.size(); - std::vector<double> S(d); - S[0]= S0; - for(int i=1;i<d;i++){ - S[i]=S[i-1]*exp((r-V*V/2)*(T/d)+V*sqrt(T/d)*X[i]); +std::vector<double> path_gen(std::vector<double> X, option_param *p){ + std::vector<double> S(p->d); + S[0]= p->S0; + for(int i=1;i<p->d;i++){ + S[i]=S[i-1]*exp((p->r-p->V*p->V/2)*(p->T/p->d)+p->V*sqrt(p->T/p->d)*X[i]); } return S; } -double mean_monte_carl(double r, double T, double S0, double V, int N, int d){ +double mean_monte_carl(option_param* p, int N){ double moyenne=0; gaussian G; - std::vector<double> S(d); - std::vector<double> X(d); + std::vector<double> S(p->d); + std::vector<double> X(p->d); for(int i=1; i<N; i++){ - for(int j=1;j<d;i++){ + for(int j=1;j<p->d;i++){ X[i]=G(); } - S=path_gen(X); + S=path_gen(X, p); moyenne+=std::accumulate(S.begin(), S.end(), 0 ); } return moyenne/N; @@ -37,15 +38,10 @@ double mean_monte_carl(double r, double T, double S0, double V, int N, int d){ int main(){ init_alea(0); - double r=0.05; - double T=1.0; - double S0=50.0; - double V=0.1; - int d=16; + option_param* p = {.r=0.05, .T=1.0, .S0=50.0, .V=0.1, .d=16}; int N=1000000; - - double moyenne = mean_monte_carl(r, T, S0, V, N, d); + double moyenne = mean_monte_carl(p, N); std::cout<<moyenne<<std::endl; |
