58 constexpr double ei[] = {
59 1.915047433355013959531e2, 4.403798995348382689974e2,
60 1.037878290717089587658e3, 2.492228976241877759138e3,
61 6.071406374098611507965e3, 1.495953266639752885229e4,
62 3.719768849068903560439e4, 9.319251363396537129882e4,
63 2.349558524907683035782e5, 5.955609986708370018502e5,
64 1.516637894042516884433e6, 3.877904330597443502996e6,
65 9.950907251046844760026e6, 2.561565266405658882048e7,
66 6.612718635548492136250e7, 1.711446713003636684975e8,
67 4.439663698302712208698e8, 1.154115391849182948287e9,
68 3.005950906525548689841e9, 7.842940991898186370453e9,
69 2.049649711988081236484e10, 5.364511859231469415605e10,
70 1.405991957584069047340e11, 3.689732094072741970640e11,
71 9.694555759683939661662e11, 2.550043566357786926147e12,
72 6.714640184076497558707e12, 1.769803724411626854310e13,
73 4.669055014466159544500e13, 1.232852079912097685431e14,
74 3.257988998672263996790e14, 8.616388199965786544948e14,
75 2.280446200301902595341e15, 6.039718263611241578359e15,
76 1.600664914324504111070e16, 4.244796092136850759368e16,
77 1.126348290166966760275e17, 2.990444718632336675058e17,
78 7.943916035704453771510e17, 2.111342388647824195000e18,
79 5.614329680810343111535e18, 1.493630213112993142255e19,
80 3.975442747903744836007e19, 1.058563689713169096306e20
83 int k =
static_cast<int>(x + 0.5);
84 double xx =
static_cast<double>(k);
88 double Sn = (edx - 1.) / xx;
89 double term = exp(100.);
90 double factorial = 1.;
94 while (term >
epsilon * fabs(Sn)) {
96 factorial *=
static_cast<double>(j);
98 Sm += (dxj / factorial);
99 term = (factorial * (edx * Sm - 1.)) / xx;
103 return ei[k - 7] + Sn * exp(xx);