// private constructor
        private SabrExtrapolationRightFunction(double forward, SabrFormulaData sabrData, double cutOffStrike, double timeToExpiry, double mu, VolatilityFunctionProvider <SabrFormulaData> volatilityFunction)
        {
            ArgChecker.notNull(sabrData, "sabrData");
            ArgChecker.notNull(volatilityFunction, "volatilityFunction");
            this.sabrFunction = volatilityFunction;
            this.forward      = forward;
            this.sabrData     = sabrData;
            this.cutOffStrike = cutOffStrike;
            this.timeToExpiry = timeToExpiry;
            this.mu           = mu;
            if (timeToExpiry > SMALL_EXPIRY)
            {
                parameter = computesFittingParameters();
            }
            else
            {     // Implementation note: when time to expiry is very small, the price above the cut-off strike and its derivatives should be 0 (or at least very small).
                parameter = new double[] { SMALL_PARAMETER, 0.0, 0.0 };
                parameterDerivativeForward = new double[3];
//JAVA TO C# CONVERTER NOTE: The following call to the 'RectangularArrays' helper class reproduces the rectangular array initialization that is automatic in Java:
//ORIGINAL LINE: parameterDerivativeSabr = new double[4][3];
                parameterDerivativeSabr = RectangularArrays.ReturnRectangularDoubleArray(4, 3);
            }
        }
 /// <summary>
 /// Obtains an instance with volatility provider specified.
 /// </summary>
 /// <param name="forward">  the forward </param>
 /// <param name="sabrData">  the SABR formula data </param>
 /// <param name="cutOffStrike">  the cut-off-strike </param>
 /// <param name="timeToExpiry">  the time to expiration </param>
 /// <param name="mu">  the mu parameter </param>
 /// <param name="volatilityFunction">  the volatility function </param>
 /// <returns> the instance </returns>
 public static SabrExtrapolationRightFunction of(double forward, SabrFormulaData sabrData, double cutOffStrike, double timeToExpiry, double mu, VolatilityFunctionProvider <SabrFormulaData> volatilityFunction)
 {
     return(new SabrExtrapolationRightFunction(forward, sabrData, cutOffStrike, timeToExpiry, mu, volatilityFunction));
 }