x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;\frac{y}{z} - \frac{t}{1 - z} = -\infty:\\
\;\;\;\;\frac{y \cdot x}{z}\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1 - z} \le 1.25948042757235515125902558255200611207 \cdot 10^{295}:\\
\;\;\;\;\left(\frac{y}{z} - \frac{t}{1 - z}\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{y \cdot x}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r21325400 = x;
double r21325401 = y;
double r21325402 = z;
double r21325403 = r21325401 / r21325402;
double r21325404 = t;
double r21325405 = 1.0;
double r21325406 = r21325405 - r21325402;
double r21325407 = r21325404 / r21325406;
double r21325408 = r21325403 - r21325407;
double r21325409 = r21325400 * r21325408;
return r21325409;
}
double f(double x, double y, double z, double t) {
double r21325410 = y;
double r21325411 = z;
double r21325412 = r21325410 / r21325411;
double r21325413 = t;
double r21325414 = 1.0;
double r21325415 = r21325414 - r21325411;
double r21325416 = r21325413 / r21325415;
double r21325417 = r21325412 - r21325416;
double r21325418 = -inf.0;
bool r21325419 = r21325417 <= r21325418;
double r21325420 = x;
double r21325421 = r21325410 * r21325420;
double r21325422 = r21325421 / r21325411;
double r21325423 = 1.2594804275723552e+295;
bool r21325424 = r21325417 <= r21325423;
double r21325425 = r21325417 * r21325420;
double r21325426 = r21325424 ? r21325425 : r21325422;
double r21325427 = r21325419 ? r21325422 : r21325426;
return r21325427;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.5 |
|---|---|
| Target | 4.2 |
| Herbie | 1.5 |
if (- (/ y z) (/ t (- 1.0 z))) < -inf.0 or 1.2594804275723552e+295 < (- (/ y z) (/ t (- 1.0 z))) Initial program 55.8
Taylor expanded around 0 3.3
if -inf.0 < (- (/ y z) (/ t (- 1.0 z))) < 1.2594804275723552e+295Initial program 1.4
Final simplification1.5
herbie shell --seed 2019179
(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)))))