x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;x \le -5.112516848695828332647411301833499628185 \cdot 10^{-104} \lor \neg \left(x \le 4.150754646520127175787942828061912974483 \cdot 10^{-156}\right):\\
\;\;\;\;x \cdot \left(\frac{y}{z} - t \cdot \frac{1}{1 - z}\right)\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{x}{z} + \frac{t \cdot \left(-x\right)}{1 - z}\\
\end{array}double f(double x, double y, double z, double t) {
double r246759 = x;
double r246760 = y;
double r246761 = z;
double r246762 = r246760 / r246761;
double r246763 = t;
double r246764 = 1.0;
double r246765 = r246764 - r246761;
double r246766 = r246763 / r246765;
double r246767 = r246762 - r246766;
double r246768 = r246759 * r246767;
return r246768;
}
double f(double x, double y, double z, double t) {
double r246769 = x;
double r246770 = -5.1125168486958283e-104;
bool r246771 = r246769 <= r246770;
double r246772 = 4.150754646520127e-156;
bool r246773 = r246769 <= r246772;
double r246774 = !r246773;
bool r246775 = r246771 || r246774;
double r246776 = y;
double r246777 = z;
double r246778 = r246776 / r246777;
double r246779 = t;
double r246780 = 1.0;
double r246781 = 1.0;
double r246782 = r246781 - r246777;
double r246783 = r246780 / r246782;
double r246784 = r246779 * r246783;
double r246785 = r246778 - r246784;
double r246786 = r246769 * r246785;
double r246787 = r246769 / r246777;
double r246788 = r246776 * r246787;
double r246789 = -r246769;
double r246790 = r246779 * r246789;
double r246791 = r246790 / r246782;
double r246792 = r246788 + r246791;
double r246793 = r246775 ? r246786 : r246792;
return r246793;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.5 |
|---|---|
| Target | 4.1 |
| Herbie | 4.0 |
if x < -5.1125168486958283e-104 or 4.150754646520127e-156 < x Initial program 3.0
rmApplied div-inv3.0
if -5.1125168486958283e-104 < x < 4.150754646520127e-156Initial program 7.2
rmApplied *-un-lft-identity7.2
Applied add-cube-cbrt7.5
Applied times-frac7.5
Simplified7.5
rmApplied sub-neg7.5
Applied distribute-lft-in7.5
Simplified6.0
Simplified5.7
rmApplied associate-*l/5.7
Final simplification4.0
herbie shell --seed 2019304 +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.62322630331204244e-196) (* x (- (/ y z) (* t (/ 1 (- 1 z))))) (if (< (* x (- (/ y z) (/ t (- 1 z)))) 1.41339449277023022e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1 z)))) (* x (- (/ y z) (* t (/ 1 (- 1 z)))))))
(* x (- (/ y z) (/ t (- 1 z)))))