x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\begin{array}{l}
\mathbf{if}\;z \le -3.168216123229296831008511442933072558801 \cdot 10^{55} \lor \neg \left(z \le 9.979529776664346341474863534760464067821 \cdot 10^{57}\right):\\
\;\;\;\;\mathsf{fma}\left(y, \frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z, 3.130605476229999961645944495103321969509, 11.16675412620000074070958362426608800888\right), z, t\right), z, a\right), z, b\right) \cdot \frac{y}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z + 15.2346874069999991263557603815570473671, z, 31.46901157490000144889563671313226222992\right), z, 11.94009057210000079862766142468899488449\right), z, 0.6077713877710000378584709324059076607227\right)} + x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r201455 = x;
double r201456 = y;
double r201457 = z;
double r201458 = 3.13060547623;
double r201459 = r201457 * r201458;
double r201460 = 11.1667541262;
double r201461 = r201459 + r201460;
double r201462 = r201461 * r201457;
double r201463 = t;
double r201464 = r201462 + r201463;
double r201465 = r201464 * r201457;
double r201466 = a;
double r201467 = r201465 + r201466;
double r201468 = r201467 * r201457;
double r201469 = b;
double r201470 = r201468 + r201469;
double r201471 = r201456 * r201470;
double r201472 = 15.234687407;
double r201473 = r201457 + r201472;
double r201474 = r201473 * r201457;
double r201475 = 31.4690115749;
double r201476 = r201474 + r201475;
double r201477 = r201476 * r201457;
double r201478 = 11.9400905721;
double r201479 = r201477 + r201478;
double r201480 = r201479 * r201457;
double r201481 = 0.607771387771;
double r201482 = r201480 + r201481;
double r201483 = r201471 / r201482;
double r201484 = r201455 + r201483;
return r201484;
}
double f(double x, double y, double z, double t, double a, double b) {
double r201485 = z;
double r201486 = -3.168216123229297e+55;
bool r201487 = r201485 <= r201486;
double r201488 = 9.979529776664346e+57;
bool r201489 = r201485 <= r201488;
double r201490 = !r201489;
bool r201491 = r201487 || r201490;
double r201492 = y;
double r201493 = t;
double r201494 = 2.0;
double r201495 = pow(r201485, r201494);
double r201496 = r201493 / r201495;
double r201497 = 3.13060547623;
double r201498 = r201496 + r201497;
double r201499 = x;
double r201500 = fma(r201492, r201498, r201499);
double r201501 = 11.1667541262;
double r201502 = fma(r201485, r201497, r201501);
double r201503 = fma(r201502, r201485, r201493);
double r201504 = a;
double r201505 = fma(r201503, r201485, r201504);
double r201506 = b;
double r201507 = fma(r201505, r201485, r201506);
double r201508 = 15.234687407;
double r201509 = r201485 + r201508;
double r201510 = 31.4690115749;
double r201511 = fma(r201509, r201485, r201510);
double r201512 = 11.9400905721;
double r201513 = fma(r201511, r201485, r201512);
double r201514 = 0.607771387771;
double r201515 = fma(r201513, r201485, r201514);
double r201516 = r201492 / r201515;
double r201517 = r201507 * r201516;
double r201518 = r201517 + r201499;
double r201519 = r201491 ? r201500 : r201518;
return r201519;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 29.2 |
|---|---|
| Target | 1.1 |
| Herbie | 1.3 |
if z < -3.168216123229297e+55 or 9.979529776664346e+57 < z Initial program 61.9
Simplified60.6
Taylor expanded around inf 8.1
Simplified0.6
if -3.168216123229297e+55 < z < 9.979529776664346e+57Initial program 3.4
Simplified1.8
rmApplied clear-num1.9
rmApplied fma-udef1.9
Simplified1.8
rmApplied div-inv1.9
Simplified1.8
Final simplification1.3
herbie shell --seed 2019325 +o rules:numerics
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
:precision binary64
:herbie-target
(if (< z -6.499344996252632e+53) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.066965436914287e+59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771) (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771))))