x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;\frac{y}{z} - \frac{t}{1 - z} \le -6.342310971280441367479099898482680011803 \cdot 10^{248} \lor \neg \left(\frac{y}{z} - \frac{t}{1 - z} \le -3.416216294383103464023774770379808679927 \cdot 10^{-188} \lor \neg \left(\frac{y}{z} - \frac{t}{1 - z} \le 1.924486920441284773874832647225661147178 \cdot 10^{-111}\right) \land \frac{y}{z} - \frac{t}{1 - z} \le 3.122392901089355157555263365595082273021 \cdot 10^{143}\right):\\
\;\;\;\;\left(-t\right) \cdot \frac{x}{1 - z} + \frac{y \cdot x}{z}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{y}{z} - \frac{t}{1 - z}\right) \cdot x\\
\end{array}double f(double x, double y, double z, double t) {
double r320754 = x;
double r320755 = y;
double r320756 = z;
double r320757 = r320755 / r320756;
double r320758 = t;
double r320759 = 1.0;
double r320760 = r320759 - r320756;
double r320761 = r320758 / r320760;
double r320762 = r320757 - r320761;
double r320763 = r320754 * r320762;
return r320763;
}
double f(double x, double y, double z, double t) {
double r320764 = y;
double r320765 = z;
double r320766 = r320764 / r320765;
double r320767 = t;
double r320768 = 1.0;
double r320769 = r320768 - r320765;
double r320770 = r320767 / r320769;
double r320771 = r320766 - r320770;
double r320772 = -6.342310971280441e+248;
bool r320773 = r320771 <= r320772;
double r320774 = -3.4162162943831035e-188;
bool r320775 = r320771 <= r320774;
double r320776 = 1.9244869204412848e-111;
bool r320777 = r320771 <= r320776;
double r320778 = !r320777;
double r320779 = 3.122392901089355e+143;
bool r320780 = r320771 <= r320779;
bool r320781 = r320778 && r320780;
bool r320782 = r320775 || r320781;
double r320783 = !r320782;
bool r320784 = r320773 || r320783;
double r320785 = -r320767;
double r320786 = x;
double r320787 = r320786 / r320769;
double r320788 = r320785 * r320787;
double r320789 = r320764 * r320786;
double r320790 = r320789 / r320765;
double r320791 = r320788 + r320790;
double r320792 = r320771 * r320786;
double r320793 = r320784 ? r320791 : r320792;
return r320793;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.5 |
|---|---|
| Target | 4.2 |
| Herbie | 1.0 |
if (- (/ y z) (/ t (- 1.0 z))) < -6.342310971280441e+248 or -3.4162162943831035e-188 < (- (/ y z) (/ t (- 1.0 z))) < 1.9244869204412848e-111 or 3.122392901089355e+143 < (- (/ y z) (/ t (- 1.0 z))) Initial program 11.8
rmApplied add-cube-cbrt11.9
Applied associate-/r*11.9
rmApplied sub-neg11.9
Applied distribute-lft-in11.9
Simplified3.0
Simplified2.2
if -6.342310971280441e+248 < (- (/ y z) (/ t (- 1.0 z))) < -3.4162162943831035e-188 or 1.9244869204412848e-111 < (- (/ y z) (/ t (- 1.0 z))) < 3.122392901089355e+143Initial program 0.2
rmApplied add-cube-cbrt0.5
Applied associate-/r*0.5
rmApplied *-un-lft-identity0.5
Applied associate-*l*0.5
Simplified0.2
Final simplification1.0
herbie shell --seed 2019195
(FPCore (x y z t)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, C"
:herbie-target
(if (< (* x (- (/ y z) (/ t (- 1.0 z)))) -7.623226303312042e-196) (* x (- (/ y z) (* t (/ 1.0 (- 1.0 z))))) (if (< (* x (- (/ y z) (/ t (- 1.0 z)))) 1.4133944927702302e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1.0 z)))) (* x (- (/ y z) (* t (/ 1.0 (- 1.0 z)))))))
(* x (- (/ y z) (/ t (- 1.0 z)))))