public EuropeanPutResult Calculate(double K, double S, double r, double t, double sigma)
        {
            EuropeanPutResult ePut = new EuropeanPutResult();

            ePut.IntegralPointD1 = _integralPoints.CalculateIntegralPointD1(S, K, r, sigma, t);
            ePut.IntegralPointD2 = _integralPoints.CalculateIntegralPointD2(ePut.IntegralPointD1, sigma, t);
            ePut.Distribution1   = _distribution.CumulativeDistribution(-ePut.IntegralPointD1.Result.Value);
            ePut.Distribution2   = _distribution.CumulativeDistribution(-ePut.IntegralPointD2.Result.Value);
            ePut.Result.Value    = CalculateValue(K, S, r, t, ePut);

            return(ePut);
        }
 private static double CalculateValue(double K, double S, double r, double t, EuropeanPutResult ePut)
 {
     return(K * Math.Exp(-r * t) * ePut.Distribution2 - (S * ePut.Distribution1));
 }