x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}\begin{array}{l}
\mathbf{if}\;y \le -5.528608899369224207630348298103310615572 \cdot 10^{60}:\\
\;\;\;\;x + \frac{e^{-z}}{y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\left({\left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)}^{y} \cdot {\left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)}^{y}\right) \cdot {\left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)}^{y}}{y}\\
\end{array}double f(double x, double y, double z) {
double r271963 = x;
double r271964 = y;
double r271965 = z;
double r271966 = r271965 + r271964;
double r271967 = r271964 / r271966;
double r271968 = log(r271967);
double r271969 = r271964 * r271968;
double r271970 = exp(r271969);
double r271971 = r271970 / r271964;
double r271972 = r271963 + r271971;
return r271972;
}
double f(double x, double y, double z) {
double r271973 = y;
double r271974 = -5.528608899369224e+60;
bool r271975 = r271973 <= r271974;
double r271976 = x;
double r271977 = z;
double r271978 = -r271977;
double r271979 = exp(r271978);
double r271980 = r271979 / r271973;
double r271981 = r271976 + r271980;
double r271982 = cbrt(r271973);
double r271983 = r271977 + r271973;
double r271984 = cbrt(r271983);
double r271985 = r271982 / r271984;
double r271986 = pow(r271985, r271973);
double r271987 = r271986 * r271986;
double r271988 = r271987 * r271986;
double r271989 = r271988 / r271973;
double r271990 = r271976 + r271989;
double r271991 = r271975 ? r271981 : r271990;
return r271991;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.0 |
| Herbie | 0.6 |
if y < -5.528608899369224e+60Initial program 2.4
Simplified2.4
Taylor expanded around inf 0.1
if -5.528608899369224e+60 < y Initial program 6.9
Simplified6.9
rmApplied add-cube-cbrt15.0
Applied add-cube-cbrt6.9
Applied times-frac6.9
Applied unpow-prod-down1.9
rmApplied times-frac1.9
Applied unpow-prod-down0.7
Final simplification0.6
herbie shell --seed 2019326 +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)))