x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right) \le -1.7824657187101655 \cdot 10^{283}:\\
\;\;\;\;\frac{x \cdot \left(y \cdot \left(1 - z\right) - z \cdot t\right)}{z \cdot \left(1 - z\right)}\\
\mathbf{elif}\;x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right) \le -3.4079334438846939 \cdot 10^{-303}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} - t \cdot \frac{1}{1 - z}\right)\\
\mathbf{elif}\;x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right) \le 1.34256702140432422 \cdot 10^{120}:\\
\;\;\;\;\left(x \cdot \frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt[3]{z} \cdot \sqrt[3]{z}}\right) \cdot \frac{\sqrt[3]{y}}{\sqrt[3]{z}} + \frac{x \cdot \left(-t\right)}{1 - z}\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt[3]{z} \cdot \sqrt[3]{z}}\right) \cdot \frac{\sqrt[3]{y}}{\left(\sqrt[3]{\sqrt[3]{z}} \cdot \sqrt[3]{\sqrt[3]{z}}\right) \cdot \sqrt[3]{\sqrt[3]{z}}} + x \cdot \left(-\frac{t}{1 - z}\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 (((x * ((y / z) - (t / (1.0 - z)))) <= -1.7824657187101655e+283)) {
VAR = ((x * ((y * (1.0 - z)) - (z * t))) / (z * (1.0 - z)));
} else {
double VAR_1;
if (((x * ((y / z) - (t / (1.0 - z)))) <= -3.407933443884694e-303)) {
VAR_1 = (x * ((y / z) - (t * (1.0 / (1.0 - z)))));
} else {
double VAR_2;
if (((x * ((y / z) - (t / (1.0 - z)))) <= 1.3425670214043242e+120)) {
VAR_2 = (((x * ((cbrt(y) * cbrt(y)) / (cbrt(z) * cbrt(z)))) * (cbrt(y) / cbrt(z))) + ((x * -t) / (1.0 - z)));
} else {
VAR_2 = (((x * ((cbrt(y) * cbrt(y)) / (cbrt(z) * cbrt(z)))) * (cbrt(y) / ((cbrt(cbrt(z)) * cbrt(cbrt(z))) * cbrt(cbrt(z))))) + (x * -(t / (1.0 - z))));
}
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.2 |
|---|---|
| Target | 4.1 |
| Herbie | 1.5 |
if (* x (- (/ y z) (/ t (- 1.0 z)))) < -1.7824657187101655e+283Initial program 42.8
rmApplied frac-sub46.6
Applied associate-*r/7.3
if -1.7824657187101655e+283 < (* x (- (/ y z) (/ t (- 1.0 z)))) < -3.407933443884694e-303Initial program 0.3
rmApplied div-inv0.3
if -3.407933443884694e-303 < (* x (- (/ y z) (/ t (- 1.0 z)))) < 1.3425670214043242e+120Initial program 2.4
rmApplied sub-neg2.4
Applied distribute-lft-in2.4
rmApplied add-cube-cbrt2.8
Applied add-cube-cbrt2.9
Applied times-frac2.9
Applied associate-*r*2.1
rmApplied distribute-neg-frac2.1
Applied associate-*r/1.6
if 1.3425670214043242e+120 < (* x (- (/ y z) (/ t (- 1.0 z)))) Initial program 10.5
rmApplied sub-neg10.5
Applied distribute-lft-in10.5
rmApplied add-cube-cbrt11.1
Applied add-cube-cbrt11.2
Applied times-frac11.2
Applied associate-*r*2.6
rmApplied add-cube-cbrt2.8
Final simplification1.5
herbie shell --seed 2020100
(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)))))