x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;\frac{y}{z} - \frac{t}{1 - z} = -\infty:\\
\;\;\;\;\frac{x \cdot y}{z} + \frac{x}{1 - z} \cdot \left(-t\right)\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1 - z} \le -1.00334370782838383 \cdot 10^{-202}:\\
\;\;\;\;x \cdot \frac{y}{z} + \frac{x \cdot \left(-t\right)}{1 - z}\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1 - z} \le 8.6204358638850966 \cdot 10^{-216}:\\
\;\;\;\;\frac{x \cdot y}{z} + \frac{x}{1 - z} \cdot \left(-t\right)\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1 - z} \le 3.37903974306552555 \cdot 10^{137}:\\
\;\;\;\;\left(\sqrt[3]{x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)} \cdot \sqrt[3]{x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)}\right) \cdot \sqrt[3]{x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\sqrt[3]{z} \cdot \sqrt[3]{z}} \cdot \frac{y}{\sqrt[3]{z}} + \frac{x}{1 - z} \cdot \left(-t\right)\\
\end{array}double code(double x, double y, double z, double t) {
return (x * ((y / z) - (t / (1.0 - z))));
}
double code(double x, double y, double z, double t) {
double VAR;
if ((((y / z) - (t / (1.0 - z))) <= -inf.0)) {
VAR = (((x * y) / z) + ((x / (1.0 - z)) * -t));
} else {
double VAR_1;
if ((((y / z) - (t / (1.0 - z))) <= -1.0033437078283838e-202)) {
VAR_1 = ((x * (y / z)) + ((x * -t) / (1.0 - z)));
} else {
double VAR_2;
if ((((y / z) - (t / (1.0 - z))) <= 8.620435863885097e-216)) {
VAR_2 = (((x * y) / z) + ((x / (1.0 - z)) * -t));
} else {
double VAR_3;
if ((((y / z) - (t / (1.0 - z))) <= 3.3790397430655255e+137)) {
VAR_3 = ((cbrt((x * ((y / z) - (t / (1.0 - z))))) * cbrt((x * ((y / z) - (t / (1.0 - z)))))) * cbrt((x * ((y / z) - (t / (1.0 - z))))));
} else {
VAR_3 = (((x / (cbrt(z) * cbrt(z))) * (y / cbrt(z))) + ((x / (1.0 - z)) * -t));
}
VAR_2 = VAR_3;
}
VAR_1 = VAR_2;
}
VAR = VAR_1;
}
return VAR;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.5 |
|---|---|
| Target | 4.1 |
| Herbie | 2.7 |
if (- (/ y z) (/ t (- 1.0 z))) < -inf.0 or -1.0033437078283838e-202 < (- (/ y z) (/ t (- 1.0 z))) < 8.620435863885097e-216Initial program 19.9
rmApplied clear-num20.5
rmApplied sub-neg20.5
Applied distribute-lft-in20.5
Simplified16.4
rmApplied associate-*r/0.8
if -inf.0 < (- (/ y z) (/ t (- 1.0 z))) < -1.0033437078283838e-202Initial program 0.2
rmApplied clear-num0.3
rmApplied sub-neg0.3
Applied distribute-lft-in0.3
Simplified3.1
rmApplied associate-*l/3.7
if 8.620435863885097e-216 < (- (/ y z) (/ t (- 1.0 z))) < 3.3790397430655255e+137Initial program 0.2
rmApplied add-cube-cbrt1.3
if 3.3790397430655255e+137 < (- (/ y z) (/ t (- 1.0 z))) Initial program 11.0
rmApplied clear-num11.1
rmApplied sub-neg11.1
Applied distribute-lft-in11.1
Simplified11.7
rmApplied add-cube-cbrt12.2
Applied *-un-lft-identity12.2
Applied times-frac12.2
Applied associate-*r*4.7
Simplified4.7
Final simplification2.7
herbie shell --seed 2020105
(FPCore (x y z t)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< (* x (- (/ y z) (/ t (- 1 z)))) -7.623226303312042e-196) (* x (- (/ y z) (* t (/ 1 (- 1 z))))) (if (< (* x (- (/ y z) (/ t (- 1 z)))) 1.4133944927702302e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1 z)))) (* x (- (/ y z) (* t (/ 1 (- 1 z)))))))
(* x (- (/ y z) (/ t (- 1 z)))))