4 #include <utl/ErrorLogger.h>
19 const double p = branch *
sqrt(2*(y-1));
20 const double p2 =
Sqr(p);
21 return p + (1./6)*p2 + (1./36)*p*p2 + (1./270)*p2*p2;
34 return (y > 4.2) ? y : InverseMoyalBranchPointExpansion<branch>(y);
36 return (y > 32.) ? -log(y) : InverseMoyalBranchPointExpansion<branch>(y);
54 return numeric_limits<double>::quiet_NaN();
55 const double yy = -2*log(y);
57 return numeric_limits<double>::quiet_NaN();
58 double x = InverseMoyalApproximation<branch>(yy);
59 const double eps = branch*epsilon;
60 for (
int i = 0; i < 30; ++i) {
61 const double expmx = exp(-x);
62 const double delta = (x + expmx - yy)/(1 - expmx);
64 if (fabs(delta) < eps*x)
67 WARNING(
"convergence not reached.");
constexpr T Sqr(const T &x)
double InverseMoyalApproximation(const double y)
double InverseMoyalBranchPointExpansion(const double y)
template double InverseMoyal<+1 >(const double y, const double eps)
#define WARNING(message)
Macro for logging warning messages.
double InverseMoyal(const double y, const double epsilon)
Inverse of the Moyal function.