x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;y \le -9.51321256569866472 \cdot 10^{57} \lor \neg \left(y \le 2.3394294986221365 \cdot 10^{37}\right):\\
\;\;\;\;y \cdot \frac{x}{z} + \left(-t \cdot \frac{1}{1 - z}\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{\frac{1 - z}{t}}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r559742 = x;
double r559743 = y;
double r559744 = z;
double r559745 = r559743 / r559744;
double r559746 = t;
double r559747 = 1.0;
double r559748 = r559747 - r559744;
double r559749 = r559746 / r559748;
double r559750 = r559745 - r559749;
double r559751 = r559742 * r559750;
return r559751;
}
double f(double x, double y, double z, double t) {
double r559752 = y;
double r559753 = -9.513212565698665e+57;
bool r559754 = r559752 <= r559753;
double r559755 = 2.3394294986221365e+37;
bool r559756 = r559752 <= r559755;
double r559757 = !r559756;
bool r559758 = r559754 || r559757;
double r559759 = x;
double r559760 = z;
double r559761 = r559759 / r559760;
double r559762 = r559752 * r559761;
double r559763 = t;
double r559764 = 1.0;
double r559765 = 1.0;
double r559766 = r559765 - r559760;
double r559767 = r559764 / r559766;
double r559768 = r559763 * r559767;
double r559769 = -r559768;
double r559770 = r559769 * r559759;
double r559771 = r559762 + r559770;
double r559772 = r559752 / r559760;
double r559773 = r559766 / r559763;
double r559774 = r559764 / r559773;
double r559775 = r559772 - r559774;
double r559776 = r559759 * r559775;
double r559777 = r559758 ? r559771 : r559776;
return r559777;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 4.1 |
| Herbie | 4.1 |
if y < -9.513212565698665e+57 or 2.3394294986221365e+37 < y Initial program 9.1
rmApplied sub-neg9.1
Applied distribute-lft-in9.1
Simplified7.5
Simplified7.5
rmApplied div-inv7.5
if -9.513212565698665e+57 < y < 2.3394294986221365e+37Initial program 2.0
rmApplied clear-num2.2
Final simplification4.1
herbie shell --seed 2020043 +o rules:numerics
(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)))))