\frac{e^{x \cdot \log \left(\frac{x}{x + y}\right)}}{x}\begin{array}{l}
\mathbf{if}\;\frac{e^{x \cdot \log \left(\frac{x}{x + y}\right)}}{x} \leq -192044502.9615158:\\
\;\;\;\;\frac{{\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)}^{x} \cdot {\left(\frac{\sqrt[3]{x}}{x + y}\right)}^{x}}{x}\\
\mathbf{elif}\;\frac{e^{x \cdot \log \left(\frac{x}{x + y}\right)}}{x} \leq -1.6156379044071887 \cdot 10^{-298}:\\
\;\;\;\;\frac{1}{x \cdot e^{y}}\\
\mathbf{elif}\;\frac{e^{x \cdot \log \left(\frac{x}{x + y}\right)}}{x} \leq 0:\\
\;\;\;\;\frac{{\left(\frac{\sqrt[3]{x} \cdot \sqrt[3]{x}}{\sqrt[3]{x + y} \cdot \sqrt[3]{x + y}}\right)}^{x} \cdot {\left(\frac{\sqrt[3]{x}}{\sqrt[3]{x + y}}\right)}^{x}}{x}\\
\mathbf{elif}\;\frac{e^{x \cdot \log \left(\frac{x}{x + y}\right)}}{x} \leq 1.0214486709009476 \cdot 10^{-131}:\\
\;\;\;\;\frac{1}{x \cdot e^{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{{\left(\frac{x}{x + y}\right)}^{x}}{x}\\
\end{array}(FPCore (x y) :precision binary64 (/ (exp (* x (log (/ x (+ x y))))) x))
(FPCore (x y)
:precision binary64
(if (<= (/ (exp (* x (log (/ x (+ x y))))) x) -192044502.9615158)
(/ (* (pow (* (cbrt x) (cbrt x)) x) (pow (/ (cbrt x) (+ x y)) x)) x)
(if (<= (/ (exp (* x (log (/ x (+ x y))))) x) -1.6156379044071887e-298)
(/ 1.0 (* x (exp y)))
(if (<= (/ (exp (* x (log (/ x (+ x y))))) x) 0.0)
(/
(*
(pow (/ (* (cbrt x) (cbrt x)) (* (cbrt (+ x y)) (cbrt (+ x y)))) x)
(pow (/ (cbrt x) (cbrt (+ x y))) x))
x)
(if (<= (/ (exp (* x (log (/ x (+ x y))))) x) 1.0214486709009476e-131)
(/ 1.0 (* x (exp y)))
(/ (pow (/ x (+ x y)) x) x))))))double code(double x, double y) {
return exp(x * log(x / (x + y))) / x;
}
double code(double x, double y) {
double tmp;
if ((exp(x * log(x / (x + y))) / x) <= -192044502.9615158) {
tmp = (pow((cbrt(x) * cbrt(x)), x) * pow((cbrt(x) / (x + y)), x)) / x;
} else if ((exp(x * log(x / (x + y))) / x) <= -1.6156379044071887e-298) {
tmp = 1.0 / (x * exp(y));
} else if ((exp(x * log(x / (x + y))) / x) <= 0.0) {
tmp = (pow(((cbrt(x) * cbrt(x)) / (cbrt(x + y) * cbrt(x + y))), x) * pow((cbrt(x) / cbrt(x + y)), x)) / x;
} else if ((exp(x * log(x / (x + y))) / x) <= 1.0214486709009476e-131) {
tmp = 1.0 / (x * exp(y));
} else {
tmp = pow((x / (x + y)), x) / x;
}
return tmp;
}




Bits error versus x




Bits error versus y
Results
| Original | 11.7 |
|---|---|
| Target | 7.7 |
| Herbie | 2.5 |
if (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) < -192044502.961515814Initial program 13.1
Simplified13.1
rmApplied *-un-lft-identity_binary64_1269513.1
Applied add-cube-cbrt_binary64_1273013.1
Applied times-frac_binary64_1270113.1
Applied unpow-prod-down_binary64_127743.6
Simplified3.6
if -192044502.961515814 < (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) < -1.6156379044071887e-298 or 0.0 < (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) < 1.02144867090094756e-131Initial program 13.9
Simplified13.9
Taylor expanded around inf 0.5
rmApplied clear-num_binary64_126940.5
Simplified0.5
if -1.6156379044071887e-298 < (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) < 0.0Initial program 26.3
Simplified26.3
rmApplied add-cube-cbrt_binary64_1273028.3
Applied add-cube-cbrt_binary64_1273026.4
Applied times-frac_binary64_1270126.4
Applied unpow-prod-down_binary64_127747.9
if 1.02144867090094756e-131 < (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) Initial program 2.1
Simplified2.1
Final simplification2.5
herbie shell --seed 2020342
(FPCore (x y)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, F"
:precision binary64
:herbie-target
(if (< y -3.7311844206647956e+94) (/ (exp (/ -1.0 y)) x) (if (< y 2.817959242728288e+37) (/ (pow (/ x (+ y x)) x) x) (if (< y 2.347387415166998e+178) (log (exp (/ (pow (/ x (+ y x)) x) x))) (/ (exp (/ -1.0 y)) x))))
(/ (exp (* x (log (/ x (+ x y))))) x))