\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 -2.304748920241807 \cdot 10^{+33}:\\
\;\;\;\;\frac{{\left(\frac{\sqrt[3]{x}}{\sqrt[3]{x + y}}\right)}^{x} \cdot \left({\left(\frac{\sqrt[3]{x}}{\sqrt[3]{x + y}}\right)}^{x} \cdot {\left(\frac{\sqrt[3]{x}}{\sqrt[3]{x + y}}\right)}^{x}\right)}{x}\\
\mathbf{elif}\;\frac{e^{x \cdot \log \left(\frac{x}{x + y}\right)}}{x} \leq -2.6646814840953197 \cdot 10^{-307}:\\
\;\;\;\;\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}}{\sqrt[3]{x + y}}\right)}^{x} \cdot \left({\left(\frac{\sqrt[3]{x}}{\sqrt[3]{x + y}}\right)}^{x} \cdot {\left(\frac{\sqrt[3]{x}}{\sqrt[3]{x + y}}\right)}^{x}\right)}{x}\\
\mathbf{elif}\;\frac{e^{x \cdot \log \left(\frac{x}{x + y}\right)}}{x} \leq 8.201462564954265 \cdot 10^{-104}:\\
\;\;\;\;\frac{e^{-y}}{x}\\
\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) -2.304748920241807e+33)
(/
(*
(pow (/ (cbrt x) (cbrt (+ x y))) x)
(*
(pow (/ (cbrt x) (cbrt (+ x y))) x)
(pow (/ (cbrt x) (cbrt (+ x y))) x)))
x)
(if (<= (/ (exp (* x (log (/ x (+ x y))))) x) -2.6646814840953197e-307)
(/ 1.0 (* x (exp y)))
(if (<= (/ (exp (* x (log (/ x (+ x y))))) x) 0.0)
(/
(*
(pow (/ (cbrt x) (cbrt (+ x y))) x)
(*
(pow (/ (cbrt x) (cbrt (+ x y))) x)
(pow (/ (cbrt x) (cbrt (+ x y))) x)))
x)
(if (<= (/ (exp (* x (log (/ x (+ x y))))) x) 8.201462564954265e-104)
(/ (exp (- y)) x)
(/ (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) <= -2.304748920241807e+33) {
tmp = (pow((cbrt(x) / cbrt(x + y)), x) * (pow((cbrt(x) / cbrt(x + y)), x) * pow((cbrt(x) / cbrt(x + y)), x))) / x;
} else if ((exp(x * log(x / (x + y))) / x) <= -2.6646814840953197e-307) {
tmp = 1.0 / (x * exp(y));
} else if ((exp(x * log(x / (x + y))) / x) <= 0.0) {
tmp = (pow((cbrt(x) / cbrt(x + y)), x) * (pow((cbrt(x) / cbrt(x + y)), x) * pow((cbrt(x) / cbrt(x + y)), x))) / x;
} else if ((exp(x * log(x / (x + y))) / x) <= 8.201462564954265e-104) {
tmp = exp(-y) / x;
} else {
tmp = pow((x / (x + y)), x) / x;
}
return tmp;
}




Bits error versus x




Bits error versus y
Results
| Original | 11.3 |
|---|---|
| Target | 7.8 |
| Herbie | 1.0 |
if (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) < -2.30474892024180707e33 or -2.6646814840953197e-307 < (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) < 0.0Initial program 18.1
Simplified18.1
rmApplied add-cube-cbrt_binary64_1224118.2
Applied add-cube-cbrt_binary64_1224118.2
Applied times-frac_binary64_1221518.2
Applied unpow-prod-down_binary64_122853.5
rmApplied times-frac_binary64_122153.5
Applied unpow-prod-down_binary64_122850.1
if -2.30474892024180707e33 < (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) < -2.6646814840953197e-307Initial program 10.3
Simplified10.3
Taylor expanded around inf 2.6
rmApplied clear-num_binary64_122082.6
Simplified2.6
if 0.0 < (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) < 8.2014625649542646e-104Initial program 16.3
Simplified16.3
Taylor expanded around inf 0.1
if 8.2014625649542646e-104 < (/.f64 (exp.f64 (*.f64 x (log.f64 (/.f64 x (+.f64 x y))))) x) Initial program 1.1
Simplified1.1
Final simplification1.0
herbie shell --seed 2020292
(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))