docs: public static double sabrNormalVolatilitySkewApproximation(double alpha, double beta, double rho, double nu, double displacement, double underlying, double maturity)
  	{
  		double sigma = sabrBerestyckiNormalVolatilityApproximation(alpha, beta, rho, nu, displacement, underlying, underlying, maturity);
  
  		// Apply displacement. Displaced model is just a shift on underlying and strike.
  		underlying += displacement;
  
  		double a = alpha/Math.pow(underlying, 1-beta);
  		double c = 1.0/24*Math.pow(a, 3)*beta*(1.0-beta);
  
  		double skew = + (rho*nu/a + beta) * (1.0/2.0*sigma/underlying) - maturity*c*(3.0*rho*nu/a + beta - 2.0);
  
  		// Some alternative representations
  		//		double term1dterm21 = (beta*(2-beta)*alpha*alpha*alpha)/24*Math.pow(underlying,-3.0*(1.0-beta)) * (1.0-beta);
  		//		double term1dterm22 = beta*alpha*alpha*rho*nu / 4 * Math.pow(underlying,-2.0*(1.0-beta)) * -(1.0-beta) * 0.5;
  		//		skew = + 1.0/2.0*sigma/underlying*(rho*nu/alpha * Math.pow(underlying, 1-beta) + beta) + maturity * (term1dterm21+term1dterm22);
  		//		skew = + (rho*nu/a + beta) * (1.0/2.0*sigma/underlying - maturity*3.0*c) + maturity*2.0*c*(1+beta);
  		//		skew = + (rho*nu/a + beta) * (1.0/2.0*sigma/underlying - maturity*c) - maturity*c*(2.0*rho*nu/a - 2.0);
  
  		// The follwoing may be used as approximations (for beta=0 the approximation is exact).
  		//		double approximation = (rho*nu/a + beta) * (1.0/2.0*sigma/underlying);
  		//		double residual =  skew - approximation;
  
  		return  skew;
  	}