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} \le -1.133138390126253 \cdot 10^{+295}:\\
\;\;\;\;\frac{y \cdot x}{z}\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le 5.770308615374242 \cdot 10^{+303}:\\
\;\;\;\;\left(\frac{y}{z} - \frac{t}{1.0 - z}\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{y \cdot x}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r22359412 = x;
double r22359413 = y;
double r22359414 = z;
double r22359415 = r22359413 / r22359414;
double r22359416 = t;
double r22359417 = 1.0;
double r22359418 = r22359417 - r22359414;
double r22359419 = r22359416 / r22359418;
double r22359420 = r22359415 - r22359419;
double r22359421 = r22359412 * r22359420;
return r22359421;
}
double f(double x, double y, double z, double t) {
double r22359422 = y;
double r22359423 = z;
double r22359424 = r22359422 / r22359423;
double r22359425 = t;
double r22359426 = 1.0;
double r22359427 = r22359426 - r22359423;
double r22359428 = r22359425 / r22359427;
double r22359429 = r22359424 - r22359428;
double r22359430 = -1.133138390126253e+295;
bool r22359431 = r22359429 <= r22359430;
double r22359432 = x;
double r22359433 = r22359422 * r22359432;
double r22359434 = r22359433 / r22359423;
double r22359435 = 5.770308615374242e+303;
bool r22359436 = r22359429 <= r22359435;
double r22359437 = r22359429 * r22359432;
double r22359438 = r22359436 ? r22359437 : r22359434;
double r22359439 = r22359431 ? r22359434 : r22359438;
return r22359439;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.8 |
|---|---|
| Target | 4.5 |
| Herbie | 1.5 |
if (- (/ y z) (/ t (- 1.0 z))) < -1.133138390126253e+295 or 5.770308615374242e+303 < (- (/ y z) (/ t (- 1.0 z))) Initial program 51.2
Taylor expanded around 0 3.9
if -1.133138390126253e+295 < (- (/ y z) (/ t (- 1.0 z))) < 5.770308615374242e+303Initial program 1.3
Final simplification1.5
herbie shell --seed 2019158
(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)))))