x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}\begin{array}{l}
\mathbf{if}\;\frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y} \le -10910987967306.1348 \lor \neg \left(\frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y} \le -7.71869811703901377 \cdot 10^{-252}\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}:\\
\;\;\;\;x + e^{-1 \cdot z} \cdot \frac{1}{y}\\
\end{array}double f(double x, double y, double z) {
double r517239 = x;
double r517240 = y;
double r517241 = z;
double r517242 = r517241 + r517240;
double r517243 = r517240 / r517242;
double r517244 = log(r517243);
double r517245 = r517240 * r517244;
double r517246 = exp(r517245);
double r517247 = r517246 / r517240;
double r517248 = r517239 + r517247;
return r517248;
}
double f(double x, double y, double z) {
double r517249 = y;
double r517250 = z;
double r517251 = r517250 + r517249;
double r517252 = r517249 / r517251;
double r517253 = log(r517252);
double r517254 = r517249 * r517253;
double r517255 = exp(r517254);
double r517256 = r517255 / r517249;
double r517257 = -10910987967306.135;
bool r517258 = r517256 <= r517257;
double r517259 = -7.718698117039014e-252;
bool r517260 = r517256 <= r517259;
double r517261 = !r517260;
bool r517262 = r517258 || r517261;
double r517263 = x;
double r517264 = 2.0;
double r517265 = cbrt(r517249);
double r517266 = cbrt(r517251);
double r517267 = r517265 / r517266;
double r517268 = log(r517267);
double r517269 = r517264 * r517268;
double r517270 = r517269 + r517268;
double r517271 = r517249 * r517270;
double r517272 = exp(r517271);
double r517273 = r517272 / r517249;
double r517274 = r517263 + r517273;
double r517275 = -1.0;
double r517276 = r517275 * r517250;
double r517277 = exp(r517276);
double r517278 = 1.0;
double r517279 = r517278 / r517249;
double r517280 = r517277 * r517279;
double r517281 = r517263 + r517280;
double r517282 = r517262 ? r517274 : r517281;
return r517282;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.3 |
|---|---|
| Target | 1.3 |
| Herbie | 0.9 |
if (/ (exp (* y (log (/ y (+ z y))))) y) < -10910987967306.135 or -7.718698117039014e-252 < (/ (exp (* y (log (/ y (+ z y))))) y) Initial program 7.1
rmApplied add-cube-cbrt15.8
Applied add-cube-cbrt7.1
Applied times-frac7.1
Applied log-prod2.2
Simplified0.8
if -10910987967306.135 < (/ (exp (* y (log (/ y (+ z y))))) y) < -7.718698117039014e-252Initial program 3.0
Taylor expanded around inf 1.1
rmApplied div-inv1.1
Final simplification0.9
herbie shell --seed 2020060
(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)))