x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}\begin{array}{l}
\mathbf{if}\;z \le 2798330066458407314915328 \lor \neg \left(z \le 4.76689686693070055018888846744602636955 \cdot 10^{118}\right):\\
\;\;\;\;x + \frac{e^{y \cdot \left(2 \cdot \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right) + \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)\right)}}{y}\\
\mathbf{else}:\\
\;\;\;\;\frac{e^{-z}}{y} + x\\
\end{array}double f(double x, double y, double z) {
double r249129 = x;
double r249130 = y;
double r249131 = z;
double r249132 = r249131 + r249130;
double r249133 = r249130 / r249132;
double r249134 = log(r249133);
double r249135 = r249130 * r249134;
double r249136 = exp(r249135);
double r249137 = r249136 / r249130;
double r249138 = r249129 + r249137;
return r249138;
}
double f(double x, double y, double z) {
double r249139 = z;
double r249140 = 2.7983300664584073e+24;
bool r249141 = r249139 <= r249140;
double r249142 = 4.7668968669307006e+118;
bool r249143 = r249139 <= r249142;
double r249144 = !r249143;
bool r249145 = r249141 || r249144;
double r249146 = x;
double r249147 = y;
double r249148 = 2.0;
double r249149 = cbrt(r249147);
double r249150 = r249139 + r249147;
double r249151 = cbrt(r249150);
double r249152 = r249149 / r249151;
double r249153 = log(r249152);
double r249154 = r249148 * r249153;
double r249155 = r249154 + r249153;
double r249156 = r249147 * r249155;
double r249157 = exp(r249156);
double r249158 = r249157 / r249147;
double r249159 = r249146 + r249158;
double r249160 = -r249139;
double r249161 = exp(r249160);
double r249162 = r249161 / r249147;
double r249163 = r249162 + r249146;
double r249164 = r249145 ? r249159 : r249163;
return r249164;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.3 |
|---|---|
| Target | 1.1 |
| Herbie | 2.0 |
if z < 2.7983300664584073e+24 or 4.7668968669307006e+118 < z Initial program 5.9
rmApplied add-cube-cbrt19.3
Applied add-cube-cbrt5.9
Applied times-frac5.9
Applied log-prod1.8
Simplified0.7
if 2.7983300664584073e+24 < z < 4.7668968669307006e+118Initial program 10.9
Taylor expanded around inf 18.4
Simplified18.4
Final simplification2.0
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, G"
:precision binary64
:herbie-target
(if (< (/ y (+ z y)) 7.1154157597908e-315) (+ x (/ (exp (/ -1 z)) y)) (+ x (/ (exp (log (pow (/ y (+ y z)) y))) y)))
(+ x (/ (exp (* y (log (/ y (+ z y))))) y)))