124 static const double z1 = 1,
r8 =
z1/8;
126 static const double pih =
PI/2;
128 static const double s[16] = {
129 +1.95222097595307108, -0.68840423212571544,
130 +0.45518551322558484, -0.18045712368387785,
131 +0.04104221337585924, -0.00595861695558885,
132 +0.00060014274141443, -0.00004447083291075,
133 +0.00000253007823075, -0.00000011413075930,
134 +0.00000000418578394, -0.00000000012734706,
135 +0.00000000000326736, -0.00000000000007168,
136 +0.00000000000000136, -0.00000000000000002};
138 static const double p[29] = {
139 +0.96074783975203596, -0.03711389621239806,
140 +0.00194143988899190, -0.00017165988425147,
141 +0.00002112637753231, -0.00000327163256712,
142 +0.00000060069211615, -0.00000012586794403,
143 +0.00000002932563458, -0.00000000745695921,
144 +0.00000000204105478, -0.00000000059502230,
145 +0.00000000018322967, -0.00000000005920506,
146 +0.00000000001996517, -0.00000000000699511,
147 +0.00000000000253686, -0.00000000000094929,
148 +0.00000000000036552, -0.00000000000014449,
149 +0.00000000000005851, -0.00000000000002423,
150 +0.00000000000001025, -0.00000000000000442,
151 +0.00000000000000194, -0.00000000000000087,
152 +0.00000000000000039, -0.00000000000000018,
153 +0.00000000000000008};
155 static const double q[25] = {
156 +0.98604065696238260, -0.01347173820829521,
157 +0.00045329284116523, -0.00003067288651655,
158 +0.00000313199197601, -0.00000042110196496,
159 +0.00000006907244830, -0.00000001318321290,
160 +0.00000000283697433, -0.00000000067329234,
161 +0.00000000017339687, -0.00000000004786939,
162 +0.00000000001403235, -0.00000000000433496,
163 +0.00000000000140273, -0.00000000000047306,
164 +0.00000000000016558, -0.00000000000005994,
165 +0.00000000000002237, -0.00000000000000859,
166 +0.00000000000000338, -0.00000000000000136,
167 +0.00000000000000056, -0.00000000000000024,
168 +0.00000000000000010};
171 if (std::abs(
x) <= 8) {
178 for (
int i = 15; i >= 0; --i) {
179 b0 = s[i]+
alfa*b1-b2;
191 for (
int i = 28; i >= 0; --i) {
192 b0 =
p[i]+
alfa*b1-b2;
199 for (
int i = 24; i >= 0; --i) {
200 b0 =
q[i]+
alfa*b1-b2;
204 h = (
x > 0 ?
pih : -
pih)-
r*(
r*pp*std::sin(
x)+(b0-
h*b2)*std::cos(
x));
214 static const double z1 = 1,
r32 =
z1/32;
216 static const double ce = 0.57721566490153286;
218 static const double c[16] = {
219 +1.94054914648355493, +0.94134091328652134,
220 -0.57984503429299276, +0.30915720111592713,
221 -0.09161017922077134, +0.01644374075154625,
222 -0.00197130919521641, +0.00016925388508350,
223 -0.00001093932957311, +0.00000055223857484,
224 -0.00000002239949331, +0.00000000074653325,
225 -0.00000000002081833, +0.00000000000049312,
226 -0.00000000000001005, +0.00000000000000018};
228 static const double p[29] = {
229 +0.96074783975203596, -0.03711389621239806,
230 +0.00194143988899190, -0.00017165988425147,
231 +0.00002112637753231, -0.00000327163256712,
232 +0.00000060069211615, -0.00000012586794403,
233 +0.00000002932563458, -0.00000000745695921,
234 +0.00000000204105478, -0.00000000059502230,
235 +0.00000000018322967, -0.00000000005920506,
236 +0.00000000001996517, -0.00000000000699511,
237 +0.00000000000253686, -0.00000000000094929,
238 +0.00000000000036552, -0.00000000000014449,
239 +0.00000000000005851, -0.00000000000002423,
240 +0.00000000000001025, -0.00000000000000442,
241 +0.00000000000000194, -0.00000000000000087,
242 +0.00000000000000039, -0.00000000000000018,
243 +0.00000000000000008};
245 static const double q[25] = {
246 +0.98604065696238260, -0.01347173820829521,
247 +0.00045329284116523, -0.00003067288651655,
248 +0.00000313199197601, -0.00000042110196496,
249 +0.00000006907244830, -0.00000001318321290,
250 +0.00000000283697433, -0.00000000067329234,
251 +0.00000000017339687, -0.00000000004786939,
252 +0.00000000001403235, -0.00000000000433496,
253 +0.00000000000140273, -0.00000000000047306,
254 +0.00000000000016558, -0.00000000000005994,
255 +0.00000000000002237, -0.00000000000000859,
256 +0.00000000000000338, -0.00000000000000136,
257 +0.00000000000000056, -0.00000000000000024,
258 +0.00000000000000010};
262 h = - std::numeric_limits<double>::infinity();
263 }
else if (std::abs(
x) <= 8) {
269 for (
int i = 15; i >= 0; --i) {
270 b0 =
c[i]+
alfa*b1-b2;
274 h =
ce+std::log(std::abs(
x))-b0+
h*b2;
282 for (
int i = 28; i >= 0; --i) {
283 b0 =
p[i]+
alfa*b1-b2;
290 for (
int i = 24; i >= 0; --i) {
291 b0 =
q[i]+
alfa*b1-b2;
295 h =
r*((b0-
h*b2)*std::sin(
x)-
r*pp*std::cos(
x));