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 -6.73187102540757286279229145214825848826 \cdot 10^{50} \lor \neg \left(z \le 97618351651113624067602019470278656\right):\\
\;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509\right) - 36.52704169880641416057187598198652267456 \cdot \frac{1}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\sqrt[3]{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227} \cdot \sqrt[3]{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}} \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\sqrt[3]{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r369487 = x;
double r369488 = y;
double r369489 = z;
double r369490 = 3.13060547623;
double r369491 = r369489 * r369490;
double r369492 = 11.1667541262;
double r369493 = r369491 + r369492;
double r369494 = r369493 * r369489;
double r369495 = t;
double r369496 = r369494 + r369495;
double r369497 = r369496 * r369489;
double r369498 = a;
double r369499 = r369497 + r369498;
double r369500 = r369499 * r369489;
double r369501 = b;
double r369502 = r369500 + r369501;
double r369503 = r369488 * r369502;
double r369504 = 15.234687407;
double r369505 = r369489 + r369504;
double r369506 = r369505 * r369489;
double r369507 = 31.4690115749;
double r369508 = r369506 + r369507;
double r369509 = r369508 * r369489;
double r369510 = 11.9400905721;
double r369511 = r369509 + r369510;
double r369512 = r369511 * r369489;
double r369513 = 0.607771387771;
double r369514 = r369512 + r369513;
double r369515 = r369503 / r369514;
double r369516 = r369487 + r369515;
return r369516;
}
double f(double x, double y, double z, double t, double a, double b) {
double r369517 = z;
double r369518 = -6.731871025407573e+50;
bool r369519 = r369517 <= r369518;
double r369520 = 9.761835165111362e+34;
bool r369521 = r369517 <= r369520;
double r369522 = !r369521;
bool r369523 = r369519 || r369522;
double r369524 = x;
double r369525 = y;
double r369526 = t;
double r369527 = 2.0;
double r369528 = pow(r369517, r369527);
double r369529 = r369526 / r369528;
double r369530 = 3.13060547623;
double r369531 = r369529 + r369530;
double r369532 = 36.527041698806414;
double r369533 = 1.0;
double r369534 = r369533 / r369517;
double r369535 = r369532 * r369534;
double r369536 = r369531 - r369535;
double r369537 = r369525 * r369536;
double r369538 = r369524 + r369537;
double r369539 = 15.234687407;
double r369540 = r369517 + r369539;
double r369541 = r369540 * r369517;
double r369542 = 31.4690115749;
double r369543 = r369541 + r369542;
double r369544 = r369543 * r369517;
double r369545 = 11.9400905721;
double r369546 = r369544 + r369545;
double r369547 = r369546 * r369517;
double r369548 = 0.607771387771;
double r369549 = r369547 + r369548;
double r369550 = cbrt(r369549);
double r369551 = r369550 * r369550;
double r369552 = r369525 / r369551;
double r369553 = r369517 * r369530;
double r369554 = 11.1667541262;
double r369555 = r369553 + r369554;
double r369556 = r369555 * r369517;
double r369557 = r369556 + r369526;
double r369558 = r369557 * r369517;
double r369559 = a;
double r369560 = r369558 + r369559;
double r369561 = r369560 * r369517;
double r369562 = b;
double r369563 = r369561 + r369562;
double r369564 = r369563 / r369550;
double r369565 = r369552 * r369564;
double r369566 = r369524 + r369565;
double r369567 = r369523 ? r369538 : r369566;
return r369567;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 29.6 |
|---|---|
| Target | 0.9 |
| Herbie | 1.1 |
if z < -6.731871025407573e+50 or 9.761835165111362e+34 < z Initial program 60.3
rmApplied *-un-lft-identity60.3
Applied times-frac58.1
Simplified58.1
Taylor expanded around inf 1.3
if -6.731871025407573e+50 < z < 9.761835165111362e+34Initial program 1.7
rmApplied add-cube-cbrt1.8
Applied times-frac1.0
Final simplification1.1
herbie shell --seed 2019356
(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))))