x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;z \le -3890466172690332:\\
\;\;\;\;\frac{1}{\frac{1}{x} \cdot \frac{z}{y}} + \left(-\frac{t}{1 - z}\right) \cdot x\\
\mathbf{elif}\;z \le 6.52761212898463406 \cdot 10^{48}:\\
\;\;\;\;\frac{x \cdot y}{z} + \frac{\left(-t\right) \cdot x}{1 - z}\\
\mathbf{elif}\;z \le 4.0178358019584588 \cdot 10^{276}:\\
\;\;\;\;\frac{1}{\frac{1}{x} \cdot \frac{z}{y}} + \left(-\frac{t}{1 - z}\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot y}{z} + t \cdot \frac{-x}{1 - z}\\
\end{array}double f(double x, double y, double z, double t) {
double r491636 = x;
double r491637 = y;
double r491638 = z;
double r491639 = r491637 / r491638;
double r491640 = t;
double r491641 = 1.0;
double r491642 = r491641 - r491638;
double r491643 = r491640 / r491642;
double r491644 = r491639 - r491643;
double r491645 = r491636 * r491644;
return r491645;
}
double f(double x, double y, double z, double t) {
double r491646 = z;
double r491647 = -3890466172690332.0;
bool r491648 = r491646 <= r491647;
double r491649 = 1.0;
double r491650 = x;
double r491651 = r491649 / r491650;
double r491652 = y;
double r491653 = r491646 / r491652;
double r491654 = r491651 * r491653;
double r491655 = r491649 / r491654;
double r491656 = t;
double r491657 = 1.0;
double r491658 = r491657 - r491646;
double r491659 = r491656 / r491658;
double r491660 = -r491659;
double r491661 = r491660 * r491650;
double r491662 = r491655 + r491661;
double r491663 = 6.527612128984634e+48;
bool r491664 = r491646 <= r491663;
double r491665 = r491650 * r491652;
double r491666 = r491665 / r491646;
double r491667 = -r491656;
double r491668 = r491667 * r491650;
double r491669 = r491668 / r491658;
double r491670 = r491666 + r491669;
double r491671 = 4.017835801958459e+276;
bool r491672 = r491646 <= r491671;
double r491673 = -r491650;
double r491674 = r491673 / r491658;
double r491675 = r491656 * r491674;
double r491676 = r491666 + r491675;
double r491677 = r491672 ? r491662 : r491676;
double r491678 = r491664 ? r491670 : r491677;
double r491679 = r491648 ? r491662 : r491678;
return r491679;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.8 |
|---|---|
| Target | 4.3 |
| Herbie | 3.2 |
if z < -3890466172690332.0 or 6.527612128984634e+48 < z < 4.017835801958459e+276Initial program 2.1
rmApplied sub-neg2.1
Applied distribute-lft-in2.1
Simplified6.4
Simplified6.4
rmApplied clear-num6.6
rmApplied *-un-lft-identity6.6
Applied times-frac2.3
if -3890466172690332.0 < z < 6.527612128984634e+48Initial program 7.8
rmApplied sub-neg7.8
Applied distribute-lft-in7.8
Simplified3.3
Simplified3.3
rmApplied distribute-neg-frac3.3
Applied associate-*l/3.4
if 4.017835801958459e+276 < z Initial program 3.0
rmApplied sub-neg3.0
Applied distribute-lft-in3.0
Simplified10.1
Simplified10.1
rmApplied div-inv10.1
Applied distribute-rgt-neg-in10.1
Applied associate-*l*16.0
Simplified16.0
Final simplification3.2
herbie shell --seed 2020046 +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)))))