x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;y \le 4.442830040929055 \cdot 10^{-308} \lor \neg \left(y \le 2.91684953680309792 \cdot 10^{127}\right):\\
\;\;\;\;\frac{x}{\frac{z}{y}} + \frac{x \cdot \left(-\frac{t}{\sqrt[3]{1 - z} \cdot \sqrt[3]{1 - z}}\right)}{\sqrt[3]{1 - z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{-z} \cdot \left(-y\right) + x \cdot \left(-\frac{t}{1 - z}\right)\\
\end{array}double code(double x, double y, double z, double t) {
return ((double) (x * ((double) (((double) (y / z)) - ((double) (t / ((double) (1.0 - z))))))));
}
double code(double x, double y, double z, double t) {
double VAR;
if (((y <= 4.442830040929055e-308) || !(y <= 2.916849536803098e+127))) {
VAR = ((double) (((double) (x / ((double) (z / y)))) + ((double) (((double) (x * ((double) -(((double) (t / ((double) (((double) cbrt(((double) (1.0 - z)))) * ((double) cbrt(((double) (1.0 - z)))))))))))) / ((double) cbrt(((double) (1.0 - z))))))));
} else {
VAR = ((double) (((double) (((double) (x / ((double) -(z)))) * ((double) -(y)))) + ((double) (x * ((double) -(((double) (t / ((double) (1.0 - z))))))))));
}
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 | 5.5 |
if y < 4.442830040929055e-308 or 2.916849536803098e+127 < y Initial program 6.0
rmApplied sub-neg6.0
Applied distribute-lft-in6.0
rmApplied clear-num6.1
Applied un-div-inv5.6
rmApplied add-cube-cbrt5.8
Applied associate-/r*5.8
Applied distribute-neg-frac5.8
Applied associate-*r/6.2
if 4.442830040929055e-308 < y < 2.916849536803098e+127Initial program 2.3
rmApplied sub-neg2.3
Applied distribute-lft-in2.3
rmApplied clear-num2.4
Applied un-div-inv2.2
rmApplied frac-2neg2.2
Applied associate-/r/4.3
Final simplification5.5
herbie shell --seed 2020114
(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)))))