x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;t \le -2.227422004855874146391385985611685572535 \cdot 10^{-75} \lor \neg \left(t \le 7.709782318648622879459717225518452107143 \cdot 10^{-38}\right):\\
\;\;\;\;y \cdot \frac{x}{z} + \left(-x \cdot \frac{t}{1 - z}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{z} \cdot x + \frac{x}{1 - z} \cdot \left(-t\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r277926 = x;
double r277927 = y;
double r277928 = z;
double r277929 = r277927 / r277928;
double r277930 = t;
double r277931 = 1.0;
double r277932 = r277931 - r277928;
double r277933 = r277930 / r277932;
double r277934 = r277929 - r277933;
double r277935 = r277926 * r277934;
return r277935;
}
double f(double x, double y, double z, double t) {
double r277936 = t;
double r277937 = -2.227422004855874e-75;
bool r277938 = r277936 <= r277937;
double r277939 = 7.709782318648623e-38;
bool r277940 = r277936 <= r277939;
double r277941 = !r277940;
bool r277942 = r277938 || r277941;
double r277943 = y;
double r277944 = x;
double r277945 = z;
double r277946 = r277944 / r277945;
double r277947 = r277943 * r277946;
double r277948 = 1.0;
double r277949 = r277948 - r277945;
double r277950 = r277936 / r277949;
double r277951 = r277944 * r277950;
double r277952 = -r277951;
double r277953 = r277947 + r277952;
double r277954 = r277943 / r277945;
double r277955 = r277954 * r277944;
double r277956 = r277944 / r277949;
double r277957 = -r277936;
double r277958 = r277956 * r277957;
double r277959 = r277955 + r277958;
double r277960 = r277942 ? r277953 : r277959;
return r277960;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 5.0 |
|---|---|
| Target | 4.4 |
| Herbie | 4.6 |
if t < -2.227422004855874e-75 or 7.709782318648623e-38 < t Initial program 3.9
rmApplied sub-neg3.9
Applied distribute-rgt-in3.9
Simplified3.9
rmApplied div-inv4.0
Applied associate-*l*4.0
Simplified4.0
if -2.227422004855874e-75 < t < 7.709782318648623e-38Initial program 6.4
rmApplied sub-neg6.4
Applied distribute-rgt-in6.4
Simplified6.4
rmApplied div-inv6.4
Applied associate-*l*5.4
Simplified5.4
Final simplification4.6
herbie shell --seed 2019196 +o rules:numerics
(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.0 (- 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.0 (- 1.0 z)))))))
(* x (- (/ y z) (/ t (- 1.0 z)))))