public override void ProcessPath(ref double[] arr) { double L = 170.0; double rebate = 0.0; double P, tmp, u; bool crossed = false; for (int n = 1; n < arr.Length; n++) { // Calculate exit probability tmp = sde.Diffusion((double)arr[n - 1], (double)(n - 1) * dt); //P = 1.0; // if ((arr[n] < L) && (arr[n-1] < L)) P = Math.Exp(-2.0 * (L - arr[n - 1]) * (L - arr[n]) / (tmp * tmp * dt)); u = rand.NextDouble(); if (P >= u) { counter++; // Console.Write("{0},* {1}, {2},{3},{4} ", P, u, tmp, arr[n-1],arr[n]); // string str = Console.ReadLine(); } if (arr[n] >= L || P >= u) // if (arr[n] >= L) { // Down and out crossed = true; break; } } if (crossed == false) { // sum += Math.Max(0.0, arr[arr.Length - 1] - K); sum += m_payoff(arr[arr.Length - 1]); // Console.WriteLine(m_payoff((double)75.0)); } else { sum += rebate; } NSim++; }