x \cdot \left(\frac{y}{z} - \frac{t}{1.0 - z}\right)\begin{array}{l}
\mathbf{if}\;\frac{y}{z} - \frac{t}{1.0 - z} = -\infty:\\
\;\;\;\;\frac{x \cdot \left(\left(1.0 - z\right) \cdot y - t \cdot z\right)}{\left(1.0 - z\right) \cdot z}\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le -5.393223066037323 \cdot 10^{-209}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{1.0 - z} \cdot t\right)\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le 1.3058854717221127 \cdot 10^{-221}:\\
\;\;\;\;\frac{y \cdot x}{z} + \frac{x \cdot t}{z} \cdot \left(1 + \frac{1.0}{z}\right)\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le 3.119035244191526 \cdot 10^{+286}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{1.0 - z} \cdot t\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(\left(1.0 - z\right) \cdot y - t \cdot z\right)}{\left(1.0 - z\right) \cdot z}\\
\end{array}double f(double x, double y, double z, double t) {
double r19623583 = x;
double r19623584 = y;
double r19623585 = z;
double r19623586 = r19623584 / r19623585;
double r19623587 = t;
double r19623588 = 1.0;
double r19623589 = r19623588 - r19623585;
double r19623590 = r19623587 / r19623589;
double r19623591 = r19623586 - r19623590;
double r19623592 = r19623583 * r19623591;
return r19623592;
}
double f(double x, double y, double z, double t) {
double r19623593 = y;
double r19623594 = z;
double r19623595 = r19623593 / r19623594;
double r19623596 = t;
double r19623597 = 1.0;
double r19623598 = r19623597 - r19623594;
double r19623599 = r19623596 / r19623598;
double r19623600 = r19623595 - r19623599;
double r19623601 = -inf.0;
bool r19623602 = r19623600 <= r19623601;
double r19623603 = x;
double r19623604 = r19623598 * r19623593;
double r19623605 = r19623596 * r19623594;
double r19623606 = r19623604 - r19623605;
double r19623607 = r19623603 * r19623606;
double r19623608 = r19623598 * r19623594;
double r19623609 = r19623607 / r19623608;
double r19623610 = -5.393223066037323e-209;
bool r19623611 = r19623600 <= r19623610;
double r19623612 = 1.0;
double r19623613 = r19623612 / r19623598;
double r19623614 = r19623613 * r19623596;
double r19623615 = r19623595 - r19623614;
double r19623616 = r19623603 * r19623615;
double r19623617 = 1.3058854717221127e-221;
bool r19623618 = r19623600 <= r19623617;
double r19623619 = r19623593 * r19623603;
double r19623620 = r19623619 / r19623594;
double r19623621 = r19623603 * r19623596;
double r19623622 = r19623621 / r19623594;
double r19623623 = r19623597 / r19623594;
double r19623624 = r19623612 + r19623623;
double r19623625 = r19623622 * r19623624;
double r19623626 = r19623620 + r19623625;
double r19623627 = 3.119035244191526e+286;
bool r19623628 = r19623600 <= r19623627;
double r19623629 = r19623628 ? r19623616 : r19623609;
double r19623630 = r19623618 ? r19623626 : r19623629;
double r19623631 = r19623611 ? r19623616 : r19623630;
double r19623632 = r19623602 ? r19623609 : r19623631;
return r19623632;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.5 |
|---|---|
| Target | 4.0 |
| Herbie | 0.4 |
if (- (/ y z) (/ t (- 1.0 z))) < -inf.0 or 3.119035244191526e+286 < (- (/ y z) (/ t (- 1.0 z))) Initial program 49.1
rmApplied frac-sub49.2
Applied associate-*r/0.4
if -inf.0 < (- (/ y z) (/ t (- 1.0 z))) < -5.393223066037323e-209 or 1.3058854717221127e-221 < (- (/ y z) (/ t (- 1.0 z))) < 3.119035244191526e+286Initial program 0.2
rmApplied div-inv0.2
if -5.393223066037323e-209 < (- (/ y z) (/ t (- 1.0 z))) < 1.3058854717221127e-221Initial program 9.0
rmApplied div-inv9.1
Taylor expanded around inf 1.7
Simplified1.6
Final simplification0.4
herbie shell --seed 2019164
(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 (- 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 (- 1.0 z)))))))
(* x (- (/ y z) (/ t (- 1.0 z)))))