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 -3329472084554247498818768307486720 \lor \neg \left(z \le 206842536711288841568256\right):\\
\;\;\;\;\mathsf{fma}\left(y, 3.130605476229999961645944495103321969509 + \frac{t}{{z}^{2}}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\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 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 r261680 = x;
double r261681 = y;
double r261682 = z;
double r261683 = 3.13060547623;
double r261684 = r261682 * r261683;
double r261685 = 11.1667541262;
double r261686 = r261684 + r261685;
double r261687 = r261686 * r261682;
double r261688 = t;
double r261689 = r261687 + r261688;
double r261690 = r261689 * r261682;
double r261691 = a;
double r261692 = r261690 + r261691;
double r261693 = r261692 * r261682;
double r261694 = b;
double r261695 = r261693 + r261694;
double r261696 = r261681 * r261695;
double r261697 = 15.234687407;
double r261698 = r261682 + r261697;
double r261699 = r261698 * r261682;
double r261700 = 31.4690115749;
double r261701 = r261699 + r261700;
double r261702 = r261701 * r261682;
double r261703 = 11.9400905721;
double r261704 = r261702 + r261703;
double r261705 = r261704 * r261682;
double r261706 = 0.607771387771;
double r261707 = r261705 + r261706;
double r261708 = r261696 / r261707;
double r261709 = r261680 + r261708;
return r261709;
}
double f(double x, double y, double z, double t, double a, double b) {
double r261710 = z;
double r261711 = -3.3294720845542475e+33;
bool r261712 = r261710 <= r261711;
double r261713 = 2.0684253671128884e+23;
bool r261714 = r261710 <= r261713;
double r261715 = !r261714;
bool r261716 = r261712 || r261715;
double r261717 = y;
double r261718 = 3.13060547623;
double r261719 = t;
double r261720 = 2.0;
double r261721 = pow(r261710, r261720);
double r261722 = r261719 / r261721;
double r261723 = r261718 + r261722;
double r261724 = x;
double r261725 = fma(r261717, r261723, r261724);
double r261726 = 11.1667541262;
double r261727 = fma(r261710, r261718, r261726);
double r261728 = fma(r261727, r261710, r261719);
double r261729 = a;
double r261730 = fma(r261728, r261710, r261729);
double r261731 = b;
double r261732 = fma(r261730, r261710, r261731);
double r261733 = r261732 * r261717;
double r261734 = 15.234687407;
double r261735 = r261710 + r261734;
double r261736 = 31.4690115749;
double r261737 = fma(r261735, r261710, r261736);
double r261738 = 11.9400905721;
double r261739 = fma(r261737, r261710, r261738);
double r261740 = 0.607771387771;
double r261741 = fma(r261739, r261710, r261740);
double r261742 = r261733 / r261741;
double r261743 = r261742 + r261724;
double r261744 = r261716 ? r261725 : r261743;
return r261744;
}




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.7 |
|---|---|
| Target | 0.9 |
| Herbie | 1.3 |
if z < -3.3294720845542475e+33 or 2.0684253671128884e+23 < z Initial program 58.7
Simplified56.7
rmApplied add-cube-cbrt56.8
Taylor expanded around inf 8.3
Simplified1.6
if -3.3294720845542475e+33 < z < 2.0684253671128884e+23Initial program 1.0
Simplified0.5
rmApplied add-cube-cbrt1.0
rmApplied fma-udef1.0
Simplified1.0
Final simplification1.3
herbie shell --seed 2019303 +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.4993449962526318e53) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.0669654369142868e59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004) (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004))))