203inline void landau_pdf_pullback(
double x,
double xi,
double x0,
double d_out,
double *d_x,
double *d_xi,
double *d_x0)
209 static double p1[5] = {0.4259894875,-0.1249762550, 0.03984243700, -0.006298287635, 0.001511162253};
210 static double q1[5] = {1.0 ,-0.3388260629, 0.09594393323, -0.01608042283, 0.003778942063};
212 static double p2[5] = {0.1788541609, 0.1173957403, 0.01488850518, -0.001394989411, 0.0001283617211};
213 static double q2[5] = {1.0 , 0.7428795082, 0.3153932961, 0.06694219548, 0.008790609714};
215 static double p3[5] = {0.1788544503, 0.09359161662,0.006325387654, 0.00006611667319,-0.000002031049101};
216 static double q3[5] = {1.0 , 0.6097809921, 0.2560616665, 0.04746722384, 0.006957301675};
218 static double p4[5] = {0.9874054407, 118.6723273, 849.2794360, -743.7792444, 427.0262186};
219 static double q4[5] = {1.0 , 106.8615961, 337.6496214, 2016.712389, 1597.063511};
221 static double p5[5] = {1.003675074, 167.5702434, 4789.711289, 21217.86767, -22324.94910};
222 static double q5[5] = {1.0 , 156.9424537, 3745.310488, 9834.698876, 66924.28357};
224 static double p6[5] = {1.000827619, 664.9143136, 62972.92665, 475554.6998, -5743609.109};
225 static double q6[5] = {1.0 , 651.4101098, 56974.73333, 165917.4725, -2815759.939};
227 static double a1[3] = {0.04166666667,-0.01996527778, 0.02709538966};
229 static double a2[2] = {-1.845568670,-4.284640743};
231 const double _const0 = 0.3989422803;
232 double v = (
x - x0) / xi;
234 double _d_denlan = 0;
236 double u = ::std::exp(
v + 1.);
239 const double ue = ::std::exp(-1 / u);
240 const double us = ::std::sqrt(u);
244 double denlan = _const0 * (ue / us) * (1 + (a1[0] + (a1[1] + a1[2] * u) * u) * u);
245 _d_denlan += d_out / xi;
246 *d_xi += d_out * -(denlan / (xi * xi));
248 double _r_d3 = _d_denlan;
250 _d_ue += _const0 * _r_d3 * (1 + (a1[0] + (a1[1] + a1[2] * u) * u) * u) / us;
251 double _r5 = _const0 * _r_d3 * (1 + (a1[0] + (a1[1] + a1[2] * u) * u) * u) * -(ue / (us * us));
253 _d_u += a1[2] * _const0 * (ue / us) * _r_d3 * u * u;
254 _d_u += (a1[1] + a1[2] * u) * _const0 * (ue / us) * _r_d3 * u;
255 _d_u += (a1[0] + (a1[1] + a1[2] * u) * u) * _const0 * (ue / us) * _r_d3;
256 double _r_d2 = _d_us;
259 _r4 += _r_d2 * clad::custom_derivatives::sqrt_pushforward(u, 1.).pushforward;
261 double _r_d1 = _d_ue;
264 _r2 += _r_d1 * ::std::exp(-1 / u);
265 double _r3 = _r2 * -(-1 / (u * u));
271 _r1 += _r_d0 * ::std::exp(
v + 1.);
275 double u = ::std::exp(-
v - 1);
278 double _t8 = ::std::exp(-u);
279 double _t7 = ::std::sqrt(u);
280 double _t6 = (q1[0] + (q1[1] + (q1[2] + (q1[3] + q1[4] *
v) *
v) *
v) *
v);
281 double denlan = _t8 * _t7 * (p1[0] + (p1[1] + (p1[2] + (p1[3] + p1[4] *
v) *
v) *
v) *
v) / _t6;
282 _d_denlan += d_out / xi;
283 *d_xi += d_out * -(denlan / (xi * xi));
285 double _r_d5 = _d_denlan;
288 _r7 += _r_d5 / _t6 * (p1[0] + (p1[1] + (p1[2] + (p1[3] + p1[4] *
v) *
v) *
v) *
v) * _t7 * ::std::exp(-u);
291 _r8 += _t8 * _r_d5 / _t6 * (p1[0] + (p1[1] + (p1[2] + (p1[3] + p1[4] *
v) *
v) *
v) *
v) *
292 clad::custom_derivatives::sqrt_pushforward(u, 1.).pushforward;
294 _d_v += p1[4] * _t8 * _t7 * _r_d5 / _t6 *
v *
v *
v;
295 _d_v += (p1[3] + p1[4] *
v) * _t8 * _t7 * _r_d5 / _t6 *
v *
v;
296 _d_v += (p1[2] + (p1[3] + p1[4] *
v) *
v) * _t8 * _t7 * _r_d5 / _t6 *
v;
297 _d_v += (p1[1] + (p1[2] + (p1[3] + p1[4] *
v) *
v) *
v) * _t8 * _t7 * _r_d5 / _t6;
298 double _r9 = _r_d5 * -(_t8 * _t7 * (p1[0] + (p1[1] + (p1[2] + (p1[3] + p1[4] *
v) *
v) *
v) *
v) / (_t6 * _t6));
299 _d_v += q1[4] * _r9 *
v *
v *
v;
300 _d_v += (q1[3] + q1[4] *
v) * _r9 *
v *
v;
301 _d_v += (q1[2] + (q1[3] + q1[4] *
v) *
v) * _r9 *
v;
302 _d_v += (q1[1] + (q1[2] + (q1[3] + q1[4] *
v) *
v) *
v) * _r9;
307 _r6 += _r_d4 * ::std::exp(-
v - 1);
311 double _t10 = (q2[0] + (q2[1] + (q2[2] + (q2[3] + q2[4] *
v) *
v) *
v) *
v);
312 double denlan = (p2[0] + (p2[1] + (p2[2] + (p2[3] + p2[4] *
v) *
v) *
v) *
v) / _t10;
313 _d_denlan += d_out / xi;
314 *d_xi += d_out * -(denlan / (xi * xi));
316 double _r_d6 = _d_denlan;
318 _d_v += p2[4] * _r_d6 / _t10 *
v *
v *
v;
319 _d_v += (p2[3] + p2[4] *
v) * _r_d6 / _t10 *
v *
v;
320 _d_v += (p2[2] + (p2[3] + p2[4] *
v) *
v) * _r_d6 / _t10 *
v;
321 _d_v += (p2[1] + (p2[2] + (p2[3] + p2[4] *
v) *
v) *
v) * _r_d6 / _t10;
322 double _r10 = _r_d6 * -((p2[0] + (p2[1] + (p2[2] + (p2[3] + p2[4] *
v) *
v) *
v) *
v) / (_t10 * _t10));
323 _d_v += q2[4] * _r10 *
v *
v *
v;
324 _d_v += (q2[3] + q2[4] *
v) * _r10 *
v *
v;
325 _d_v += (q2[2] + (q2[3] + q2[4] *
v) *
v) * _r10 *
v;
326 _d_v += (q2[1] + (q2[2] + (q2[3] + q2[4] *
v) *
v) *
v) * _r10;
329 double _t12 = (q3[0] + (q3[1] + (q3[2] + (q3[3] + q3[4] *
v) *
v) *
v) *
v);
330 double denlan = (p3[0] + (p3[1] + (p3[2] + (p3[3] + p3[4] *
v) *
v) *
v) *
v) / _t12;
331 _d_denlan += d_out / xi;
332 *d_xi += d_out * -(denlan / (xi * xi));
334 double _r_d7 = _d_denlan;
336 _d_v += p3[4] * _r_d7 / _t12 *
v *
v *
v;
337 _d_v += (p3[3] + p3[4] *
v) * _r_d7 / _t12 *
v *
v;
338 _d_v += (p3[2] + (p3[3] + p3[4] *
v) *
v) * _r_d7 / _t12 *
v;
339 _d_v += (p3[1] + (p3[2] + (p3[3] + p3[4] *
v) *
v) *
v) * _r_d7 / _t12;
340 double _r11 = _r_d7 * -((p3[0] + (p3[1] + (p3[2] + (p3[3] + p3[4] *
v) *
v) *
v) *
v) / (_t12 * _t12));
341 _d_v += q3[4] * _r11 *
v *
v *
v;
342 _d_v += (q3[3] + q3[4] *
v) * _r11 *
v *
v;
343 _d_v += (q3[2] + (q3[3] + q3[4] *
v) *
v) * _r11 *
v;
344 _d_v += (q3[1] + (q3[2] + (q3[3] + q3[4] *
v) *
v) *
v) * _r11;
349 double _t15 = (q4[0] + (q4[1] + (q4[2] + (q4[3] + q4[4] * u) * u) * u) * u);
350 double denlan = u * u * (p4[0] + (p4[1] + (p4[2] + (p4[3] + p4[4] * u) * u) * u) * u) / _t15;
351 _d_denlan += d_out / xi;
352 *d_xi += d_out * -(denlan / (xi * xi));
354 double _r_d9 = _d_denlan;
356 _d_u += _r_d9 / _t15 * (p4[0] + (p4[1] + (p4[2] + (p4[3] + p4[4] * u) * u) * u) * u) * u;
357 _d_u += u * _r_d9 / _t15 * (p4[0] + (p4[1] + (p4[2] + (p4[3] + p4[4] * u) * u) * u) * u);
358 _d_u += p4[4] * u * u * _r_d9 / _t15 * u * u * u;
359 _d_u += (p4[3] + p4[4] * u) * u * u * _r_d9 / _t15 * u * u;
360 _d_u += (p4[2] + (p4[3] + p4[4] * u) * u) * u * u * _r_d9 / _t15 * u;
361 _d_u += (p4[1] + (p4[2] + (p4[3] + p4[4] * u) * u) * u) * u * u * _r_d9 / _t15;
362 double _r13 = _r_d9 * -(u * u * (p4[0] + (p4[1] + (p4[2] + (p4[3] + p4[4] * u) * u) * u) * u) / (_t15 * _t15));
363 _d_u += q4[4] * _r13 * u * u * u;
364 _d_u += (q4[3] + q4[4] * u) * _r13 * u * u;
365 _d_u += (q4[2] + (q4[3] + q4[4] * u) * u) * _r13 * u;
366 _d_u += (q4[1] + (q4[2] + (q4[3] + q4[4] * u) * u) * u) * _r13;
369 double _r12 = _r_d8 * -(1 / (
v *
v));
375 double _t18 = (q5[0] + (q5[1] + (q5[2] + (q5[3] + q5[4] * u) * u) * u) * u);
376 double denlan = u * u * (p5[0] + (p5[1] + (p5[2] + (p5[3] + p5[4] * u) * u) * u) * u) / _t18;
377 _d_denlan += d_out / xi;
378 *d_xi += d_out * -(denlan / (xi * xi));
380 double _r_d11 = _d_denlan;
382 _d_u += _r_d11 / _t18 * (p5[0] + (p5[1] + (p5[2] + (p5[3] + p5[4] * u) * u) * u) * u) * u;
383 _d_u += u * _r_d11 / _t18 * (p5[0] + (p5[1] + (p5[2] + (p5[3] + p5[4] * u) * u) * u) * u);
384 _d_u += p5[4] * u * u * _r_d11 / _t18 * u * u * u;
385 _d_u += (p5[3] + p5[4] * u) * u * u * _r_d11 / _t18 * u * u;
386 _d_u += (p5[2] + (p5[3] + p5[4] * u) * u) * u * u * _r_d11 / _t18 * u;
387 _d_u += (p5[1] + (p5[2] + (p5[3] + p5[4] * u) * u) * u) * u * u * _r_d11 / _t18;
388 double _r15 = _r_d11 * -(u * u * (p5[0] + (p5[1] + (p5[2] + (p5[3] + p5[4] * u) * u) * u) * u) / (_t18 * _t18));
389 _d_u += q5[4] * _r15 * u * u * u;
390 _d_u += (q5[3] + q5[4] * u) * _r15 * u * u;
391 _d_u += (q5[2] + (q5[3] + q5[4] * u) * u) * _r15 * u;
392 _d_u += (q5[1] + (q5[2] + (q5[3] + q5[4] * u) * u) * u) * _r15;
393 double _r_d10 = _d_u;
395 double _r14 = _r_d10 * -(1 / (
v *
v));
397 }
else if (
v < 300) {
402 double _t21 = (q6[0] + (q6[1] + (q6[2] + (q6[3] + q6[4] * u) * u) * u) * u);
403 double denlan = u * u * (p6[0] + (p6[1] + (p6[2] + (p6[3] + p6[4] * u) * u) * u) * u) / _t21;
404 _d_denlan += d_out / xi;
405 *d_xi += d_out * -(denlan / (xi * xi));
407 double _r_d13 = _d_denlan;
409 _d_u += _r_d13 / _t21 * (p6[0] + (p6[1] + (p6[2] + (p6[3] + p6[4] * u) * u) * u) * u) * u;
410 _d_u += u * _r_d13 / _t21 * (p6[0] + (p6[1] + (p6[2] + (p6[3] + p6[4] * u) * u) * u) * u);
411 _d_u += p6[4] * u * u * _r_d13 / _t21 * u * u * u;
412 _d_u += (p6[3] + p6[4] * u) * u * u * _r_d13 / _t21 * u * u;
413 _d_u += (p6[2] + (p6[3] + p6[4] * u) * u) * u * u * _r_d13 / _t21 * u;
414 _d_u += (p6[1] + (p6[2] + (p6[3] + p6[4] * u) * u) * u) * u * u * _r_d13 / _t21;
415 double _r17 = _r_d13 * -(u * u * (p6[0] + (p6[1] + (p6[2] + (p6[3] + p6[4] * u) * u) * u) * u) / (_t21 * _t21));
416 _d_u += q6[4] * _r17 * u * u * u;
417 _d_u += (q6[3] + q6[4] * u) * _r17 * u * u;
418 _d_u += (q6[2] + (q6[3] + q6[4] * u) * u) * _r17 * u;
419 _d_u += (q6[1] + (q6[2] + (q6[3] + q6[4] * u) * u) * u) * _r17;
421 double _r_d12 = _d_u;
423 double _r16 = _r_d12 * -(1 / (
v *
v));
427 double _t25 = ::std::log(
v);
428 double _t24 = (
v + 1);
429 double _t23 = (
v -
v * _t25 / _t24);
433 double denlan = u * u * (1 + (a2[0] + a2[1] * u) * u);
434 _d_denlan += d_out / xi;
435 *d_xi += d_out * -(denlan / (xi * xi));
437 double _r_d15 = _d_denlan;
439 _d_u += _r_d15 * (1 + (a2[0] + a2[1] * u) * u) * u;
440 _d_u += u * _r_d15 * (1 + (a2[0] + a2[1] * u) * u);
441 _d_u += a2[1] * u * u * _r_d15 * u;
442 _d_u += (a2[0] + a2[1] * u) * u * u * _r_d15;
444 double _r_d14 = _d_u;
446 double _r18 = _r_d14 * -(1 / (_t23 * _t23));
448 _d_v += -_r18 / _t24 * _t25;
450 _r19 +=
v * -_r18 / _t24 /
v;
452 double _r20 = -_r18 * -(
v * _t25 / (_t24 * _t24));
457 double _r0 = _d_v * -((
x - x0) / (xi * xi));
461inline void landau_cdf_pullback(
double x,
double xi,
double x0,
double d_out,
double *d_x,
double *d_xi,
double *d_x0)
464 static double p1[5] = {0.2514091491e+0,-0.6250580444e-1, 0.1458381230e-1,-0.2108817737e-2, 0.7411247290e-3};
465 static double q1[5] = {1.0 ,-0.5571175625e-2, 0.6225310236e-1,-0.3137378427e-2, 0.1931496439e-2};
467 static double p2[4] = {0.2868328584e+0, 0.3564363231e+0, 0.1523518695e+0, 0.2251304883e-1};
468 static double q2[4] = {1.0 , 0.6191136137e+0, 0.1720721448e+0, 0.2278594771e-1};
470 static double p3[4] = {0.2868329066e+0, 0.3003828436e+0, 0.9950951941e-1, 0.8733827185e-2};
471 static double q3[4] = {1.0 , 0.4237190502e+0, 0.1095631512e+0, 0.8693851567e-2};
473 static double p4[4] = {0.1000351630e+1, 0.4503592498e+1, 0.1085883880e+2, 0.7536052269e+1};
474 static double q4[4] = {1.0 , 0.5539969678e+1, 0.1933581111e+2, 0.2721321508e+2};
476 static double p5[4] = {0.1000006517e+1, 0.4909414111e+2, 0.8505544753e+2, 0.1532153455e+3};
477 static double q5[4] = {1.0 , 0.5009928881e+2, 0.1399819104e+3, 0.4200002909e+3};
479 static double p6[4] = {0.1000000983e+1, 0.1329868456e+3, 0.9162149244e+3,-0.9605054274e+3};
480 static double q6[4] = {1.0 , 0.1339887843e+3, 0.1055990413e+4, 0.5532224619e+3};
482 static double a1[4] = {0 ,-0.4583333333e+0, 0.6675347222e+0,-0.1641741416e+1};
483 static double a2[4] = {0 , 1.0 ,-0.4227843351e+0,-0.2043403138e+1};
486 const double v = (
x - x0) / xi;
490 const double _const0 = 0.3989422803;
491 double u = ::std::exp(
v + 1);
492 double _t3 = ::std::exp(-1. / u);
493 double _t2 = ::std::sqrt(u);
495 _r2 += _const0 * d_out * (1 + (a1[1] + (a1[2] + a1[3] * u) * u) * u) * _t2 * ::std::exp(-1. / u);
496 double _r3 = _r2 * -(-1. / (u * u));
499 _r4 += _const0 * _t3 * d_out * (1 + (a1[1] + (a1[2] + a1[3] * u) * u) * u) *
500 clad::custom_derivatives::sqrt_pushforward(u, 1.).pushforward;
502 _d_u += a1[3] * _const0 * _t3 * _t2 * d_out * u * u;
503 _d_u += (a1[2] + a1[3] * u) * _const0 * _t3 * _t2 * d_out * u;
504 _d_u += (a1[1] + (a1[2] + a1[3] * u) * u) * _const0 * _t3 * _t2 * d_out;
505 _d_v += _d_u * ::std::exp(
v + 1);
508 double u = ::std::exp(-
v - 1);
509 double _t8 = ::std::exp(-u);
510 double _t7 = ::std::sqrt(u);
511 double _t6 = (q1[0] + (q1[1] + (q1[2] + (q1[3] + q1[4] *
v) *
v) *
v) *
v);
513 _r6 += d_out / _t6 * (p1[0] + (p1[1] + (p1[2] + (p1[3] + p1[4] *
v) *
v) *
v) *
v) / _t7 * ::std::exp(-u);
515 double _r7 = d_out / _t6 * (p1[0] + (p1[1] + (p1[2] + (p1[3] + p1[4] *
v) *
v) *
v) *
v) * -(_t8 / (_t7 * _t7));
517 _r8 += _r7 * clad::custom_derivatives::sqrt_pushforward(u, 1.).pushforward;
519 _d_v += p1[4] * (_t8 / _t7) * d_out / _t6 *
v *
v *
v;
520 _d_v += (p1[3] + p1[4] *
v) * (_t8 / _t7) * d_out / _t6 *
v *
v;
521 _d_v += (p1[2] + (p1[3] + p1[4] *
v) *
v) * (_t8 / _t7) * d_out / _t6 *
v;
522 _d_v += (p1[1] + (p1[2] + (p1[3] + p1[4] *
v) *
v) *
v) * (_t8 / _t7) * d_out / _t6;
523 double _r9 = d_out * -((_t8 / _t7) * (p1[0] + (p1[1] + (p1[2] + (p1[3] + p1[4] *
v) *
v) *
v) *
v) / (_t6 * _t6));
524 _d_v += q1[4] * _r9 *
v *
v *
v;
525 _d_v += (q1[3] + q1[4] *
v) * _r9 *
v *
v;
526 _d_v += (q1[2] + (q1[3] + q1[4] *
v) *
v) * _r9 *
v;
527 _d_v += (q1[1] + (q1[2] + (q1[3] + q1[4] *
v) *
v) *
v) * _r9;
528 _d_v += -_d_u * ::std::exp(-
v - 1);
530 double _t10 = (q2[0] + (q2[1] + (q2[2] + q2[3] *
v) *
v) *
v);
531 _d_v += p2[3] * d_out / _t10 *
v *
v;
532 _d_v += (p2[2] + p2[3] *
v) * d_out / _t10 *
v;
533 _d_v += (p2[1] + (p2[2] + p2[3] *
v) *
v) * d_out / _t10;
534 double _r10 = d_out * -((p2[0] + (p2[1] + (p2[2] + p2[3] *
v) *
v) *
v) / (_t10 * _t10));
535 _d_v += q2[3] * _r10 *
v *
v;
536 _d_v += (q2[2] + q2[3] *
v) * _r10 *
v;
537 _d_v += (q2[1] + (q2[2] + q2[3] *
v) *
v) * _r10;
539 double _t12 = (q3[0] + (q3[1] + (q3[2] + q3[3] *
v) *
v) *
v);
540 _d_v += p3[3] * d_out / _t12 *
v *
v;
541 _d_v += (p3[2] + p3[3] *
v) * d_out / _t12 *
v;
542 _d_v += (p3[1] + (p3[2] + p3[3] *
v) *
v) * d_out / _t12;
543 double _r11 = d_out * -((p3[0] + (p3[1] + (p3[2] + p3[3] *
v) *
v) *
v) / (_t12 * _t12));
544 _d_v += q3[3] * _r11 *
v *
v;
545 _d_v += (q3[2] + q3[3] *
v) * _r11 *
v;
546 _d_v += (q3[1] + (q3[2] + q3[3] *
v) *
v) * _r11;
550 double _t15 = (q4[0] + (q4[1] + (q4[2] + q4[3] * u) * u) * u);
551 _d_u += p4[3] * d_out / _t15 * u * u;
552 _d_u += (p4[2] + p4[3] * u) * d_out / _t15 * u;
553 _d_u += (p4[1] + (p4[2] + p4[3] * u) * u) * d_out / _t15;
554 double _r13 = d_out * -((p4[0] + (p4[1] + (p4[2] + p4[3] * u) * u) * u) / (_t15 * _t15));
555 _d_u += q4[3] * _r13 * u * u;
556 _d_u += (q4[2] + q4[3] * u) * _r13 * u;
557 _d_u += (q4[1] + (q4[2] + q4[3] * u) * u) * _r13;
558 double _r12 = _d_u * -(1. / (
v *
v));
563 double _t18 = (q5[0] + (q5[1] + (q5[2] + q5[3] * u) * u) * u);
564 _d_u += p5[3] * d_out / _t18 * u * u;
565 _d_u += (p5[2] + p5[3] * u) * d_out / _t18 * u;
566 _d_u += (p5[1] + (p5[2] + p5[3] * u) * u) * d_out / _t18;
567 double _r15 = d_out * -((p5[0] + (p5[1] + (p5[2] + p5[3] * u) * u) * u) / (_t18 * _t18));
568 _d_u += q5[3] * _r15 * u * u;
569 _d_u += (q5[2] + q5[3] * u) * _r15 * u;
570 _d_u += (q5[1] + (q5[2] + q5[3] * u) * u) * _r15;
571 double _r14 = _d_u * -(1. / (
v *
v));
573 }
else if (
v < 300) {
576 double _t21 = (q6[0] + (q6[1] + (q6[2] + q6[3] * u) * u) * u);
577 _d_u += p6[3] * d_out / _t21 * u * u;
578 _d_u += (p6[2] + p6[3] * u) * d_out / _t21 * u;
579 _d_u += (p6[1] + (p6[2] + p6[3] * u) * u) * d_out / _t21;
580 double _r17 = d_out * -((p6[0] + (p6[1] + (p6[2] + p6[3] * u) * u) * u) / (_t21 * _t21));
581 _d_u += q6[3] * _r17 * u * u;
582 _d_u += (q6[2] + q6[3] * u) * _r17 * u;
583 _d_u += (q6[1] + (q6[2] + q6[3] * u) * u) * _r17;
584 double _r16 = _d_u * -(1. / (
v *
v));
588 double _t25 = ::std::log(
v);
589 double _t24 = (
v + 1);
590 double _t23 = (
v -
v * _t25 / _t24);
591 double u = 1. / _t23;
593 _d_u += a2[3] * -d_out * u * u;
594 _d_u += (a2[2] + a2[3] * u) * -d_out * u;
595 _d_u += (a2[1] + (a2[2] + a2[3] * u) * u) * -d_out;
596 double _r18 = _d_u * -(1. / (_t23 * _t23));
598 _d_v += -_r18 / _t24 * _t25;
600 _r19 +=
v * -_r18 / _t24 /
v;
602 double _r20 = -_r18 * -(
v * _t25 / (_t24 * _t24));
608 *d_xi += _d_v * -((
x - x0) / (xi * xi));
737 constexpr double kMACHEP = 1.11022302462515654042363166809e-16;
738 constexpr double kMAXLOG = 709.782712893383973096206318587;
739 constexpr double kMINLOG = -708.396418532264078748994506896;
740 constexpr double kMAXSTIR = 108.116855767857671821730036754;
741 constexpr double kMAXLGM = 2.556348e305;
742 constexpr double kBig = 4.503599627370496e15;
743 constexpr double kBiginv = 2.22044604925031308085e-16;
745 double _d_ans = 0, _d_ax = 0, _d_c = 0, _d_yc = 0, _d_r = 0, _d_t = 0, _d_y0 = 0, _d_z = 0;
746 double _d_pk = 0, _d_pkm1 = 0, _d_pkm2 = 0, _d_qk = 0, _d_qkm1 = 0, _d_qkm2 = 0;
758 clad::tape<double> _t12 = {};
759 clad::tape<double> _t13 = {};
760 clad::tape<double> _t14 = {};
761 clad::tape<double> _t15 = {};
762 clad::tape<double> _t16 = {};
763 clad::tape<double> _t17 = {};
764 clad::tape<double> _t19 = {};
765 clad::tape<double> _t20 = {};
766 clad::tape<double> _t21 = {};
767 clad::tape<double> _t22 = {};
768 clad::tape<double> _t23 = {};
769 clad::tape<double> _t24 = {};
770 clad::tape<double> _t25 = {};
771 clad::tape<double> _t26 = {};
772 clad::tape<double> _t27 = {};
773 clad::tape<bool> _t29 = {};
774 clad::tape<double> _t30 = {};
775 clad::tape<double> _t31 = {};
776 clad::tape<double> _t32 = {};
777 clad::tape<double> _t33 = {};
778 double ans, ax,
c, yc,
r, t,
y, z;
779 double pk, pkm1, pkm2, qk, qkm1, qkm2;
784 if ((
x < 1.) || (
x <
a)) {
793 ax =
a * _t1 -
x - ::std::lgamma(
a);
795 *_d_x +=
a * _d_ax /
x - _d_ax;
796 *_d_a += _d_ax * (_t1 - ::clad::custom_derivatives::std::clad_digamma(
828 clad::push(_t15, yc);
830 clad::push(_t16, pk);
831 pk = pkm1 * z - pkm2 * yc;
832 clad::push(_t17, qk);
833 qk = qkm1 * z - qkm2 * yc;
840 t = ::std::abs((ans -
r) /
r);
841 clad::push(_t22, ans);
847 clad::push(_t19, _t18);
849 clad::push(_t24, pkm2);
851 clad::push(_t25, pkm1);
853 clad::push(_t26, qkm2);
855 clad::push(_t27, qkm1);
857 bool _t28 = ::std::abs(pk) > kBig;
860 clad::push(_t30, pkm2);
862 clad::push(_t31, pkm1);
864 clad::push(_t32, qkm2);
866 clad::push(_t33, qkm1);
869 clad::push(_t29, _t28);
878 if (clad::pop(_t29)) {
880 qkm1 = clad::pop(_t33);
881 double _r_d27 = _d_qkm1;
883 _d_qkm1 += _r_d27 * kBiginv;
886 qkm2 = clad::pop(_t32);
887 double _r_d26 = _d_qkm2;
889 _d_qkm2 += _r_d26 * kBiginv;
892 pkm1 = clad::pop(_t31);
893 double _r_d25 = _d_pkm1;
895 _d_pkm1 += _r_d25 * kBiginv;
898 pkm2 = clad::pop(_t30);
899 double _r_d24 = _d_pkm2;
901 _d_pkm2 += _r_d24 * kBiginv;
905 qkm1 = clad::pop(_t27);
906 double _r_d23 = _d_qkm1;
911 qkm2 = clad::pop(_t26);
912 double _r_d22 = _d_qkm2;
917 pkm1 = clad::pop(_t25);
918 double _r_d21 = _d_pkm1;
923 pkm2 = clad::pop(_t24);
924 double _r_d20 = _d_pkm2;
928 if (clad::pop(_t19)) {
930 ans = clad::pop(_t22);
931 double _r_d18 = _d_ans;
937 double _r_d17 = _d_t;
940 _r7 += _r_d17 * clad::custom_derivatives::std::abs_pushforward((ans -
r) /
r, 1.).pushforward;
943 double _r8 = _r7 * -((ans -
r) / (
r *
r));
948 double _r_d16 = _d_r;
950 _d_pk += _r_d16 / qk;
951 double _r6 = _r_d16 * -(pk / (qk * qk));
956 double _r_d19 = _d_t;
960 qk = clad::pop(_t17);
961 double _r_d15 = _d_qk;
963 _d_qkm1 += _r_d15 * z;
964 _d_z += qkm1 * _r_d15;
965 _d_qkm2 += -_r_d15 * yc;
966 _d_yc += qkm2 * -_r_d15;
969 pk = clad::pop(_t16);
970 double _r_d14 = _d_pk;
972 _d_pkm1 += _r_d14 * z;
973 _d_z += pkm1 * _r_d14;
974 _d_pkm2 += -_r_d14 * yc;
975 _d_yc += pkm2 * -_r_d14;
978 yc = clad::pop(_t15);
979 double _r_d13 = _d_yc;
986 double _r_d12 = _d_z;
990 double _r_d11 = _d_y0;
994 double _r_d10 = _d_c;
1001 double _r_d9 = _d_ans;
1003 _d_pkm1 += _r_d9 / qkm1;
1004 double _r5 = _r_d9 * -(pkm1 / (qkm1 * qkm1));
1009 double _r_d8 = _d_qkm1;
1016 double _r_d7 = _d_pkm1;
1022 double _r_d6 = _d_qkm2;
1028 double _r_d5 = _d_pkm2;
1033 double _r_d4 = _d_c;
1038 double _r_d3 = _d_z;
1045 double _r_d2 = _d_y0;
1051 double _r_d1 = _d_ax;
1053 double _r4 = _r_d1 * ::std::exp(ax);
1057 *_d_x +=
a * _d_ax /
x - _d_ax;
1058 *_d_a += _d_ax * (_t1 - ::clad::custom_derivatives::std::clad_digamma(