x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;t \le -8.67227397293114902 \cdot 10^{32}:\\
\;\;\;\;\frac{x}{z} \cdot y + x \cdot \left(-\frac{t}{1 - z}\right)\\
\mathbf{elif}\;t \le -5.07013430888526762 \cdot 10^{-249}:\\
\;\;\;\;\frac{x}{\frac{z}{y}} + \left(t \cdot x\right) \cdot \left(-\frac{1}{1 - z}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{z \cdot \frac{1}{x \cdot y}} + x \cdot \left(-\frac{t}{1 - z}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r375709 = x;
double r375710 = y;
double r375711 = z;
double r375712 = r375710 / r375711;
double r375713 = t;
double r375714 = 1.0;
double r375715 = r375714 - r375711;
double r375716 = r375713 / r375715;
double r375717 = r375712 - r375716;
double r375718 = r375709 * r375717;
return r375718;
}
double f(double x, double y, double z, double t) {
double r375719 = t;
double r375720 = -8.672273972931149e+32;
bool r375721 = r375719 <= r375720;
double r375722 = x;
double r375723 = z;
double r375724 = r375722 / r375723;
double r375725 = y;
double r375726 = r375724 * r375725;
double r375727 = 1.0;
double r375728 = r375727 - r375723;
double r375729 = r375719 / r375728;
double r375730 = -r375729;
double r375731 = r375722 * r375730;
double r375732 = r375726 + r375731;
double r375733 = -5.070134308885268e-249;
bool r375734 = r375719 <= r375733;
double r375735 = r375723 / r375725;
double r375736 = r375722 / r375735;
double r375737 = r375719 * r375722;
double r375738 = 1.0;
double r375739 = r375738 / r375728;
double r375740 = -r375739;
double r375741 = r375737 * r375740;
double r375742 = r375736 + r375741;
double r375743 = r375722 * r375725;
double r375744 = r375738 / r375743;
double r375745 = r375723 * r375744;
double r375746 = r375738 / r375745;
double r375747 = r375746 + r375731;
double r375748 = r375734 ? r375742 : r375747;
double r375749 = r375721 ? r375732 : r375748;
return r375749;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.7 |
|---|---|
| Target | 4.3 |
| Herbie | 4.8 |
if t < -8.672273972931149e+32Initial program 4.2
rmApplied sub-neg4.2
Applied distribute-lft-in4.2
Simplified4.0
rmApplied associate-/l*3.8
rmApplied associate-/r/3.0
if -8.672273972931149e+32 < t < -5.070134308885268e-249Initial program 5.1
rmApplied sub-neg5.1
Applied distribute-lft-in5.1
Simplified6.0
rmApplied associate-/l*4.8
rmApplied div-inv4.8
Applied distribute-rgt-neg-in4.8
Applied associate-*r*4.1
Simplified4.1
if -5.070134308885268e-249 < t Initial program 4.7
rmApplied sub-neg4.7
Applied distribute-lft-in4.7
Simplified5.4
rmApplied clear-num5.6
rmApplied div-inv5.9
Final simplification4.8
herbie shell --seed 2020045
(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)))))