September 7th, 2004, 2:29 pm
here's amended code:#include "math.h"#include "stdio.h"#include <stdlib.h>#include "randomc.h"#include "mersenne.cpp"#include "van.h"#include "phi.h"#include "Norm_dist.h"#include "max.h"#include <time.h> #include <iostream.h> int main(){int32 seed = time(0); TRandomMersenne rg(seed); double kappa;double theta;double sigma;double rho;double theta_;kappa=2;theta=.01;sigma=.1;rho=0.05;double S0;S0=90;double K;K=1;double Expiry=.5;int NumSteps=256;double dt=Expiry/NumSteps;double Pi=3.1415926535897;double sqrdt;sqrdt=pow(dt,.5);double* v;v=new double[1000];double* dW2;dW2=new double[1000];double R;double Z2;double U;double VolSqrd=0.0;double temp=0;double Payout;double Strike=100;double sum=0;for(int i=1;i<=25000;i++) { v[0]=.01; temp=0; VolSqrd=0; for(int j=0;j<=NumSteps-1;j++){ U = rg.Random(); R = pow( -2 * log(U), 0.5); theta_ = 2 * Pi * rg.Random(); Z2 = R * cos(theta_); dW2[j] = Z2 * sqrdt; v[j+1]=max(v[j]+kappa*(theta-v[j])*dt+sigma*pow(v[j],.5)*dW2[j],0); VolSqrd=VolSqrd+v[j]*dt; temp=temp+rho*pow(v[j],.5)*dW2[j]-.5*rho*rho*v[j]*dt; } double zeta=0; zeta=S0*exp(temp); Payout=VAN(true,zeta,Strike,Expiry,0,0, pow(VolSqrd*(1-rho*rho)/Expiry,.5)); //Payout=zeta; sum=sum+Payout; printf (" %8.4f ", sum/(i)); cout << i << endl;}return 0;}