x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)x \cdot \mathsf{fma}\left(y, \frac{1}{z}, -\frac{t}{1 - z}\right)double f(double x, double y, double z, double t) {
double r20063590 = x;
double r20063591 = y;
double r20063592 = z;
double r20063593 = r20063591 / r20063592;
double r20063594 = t;
double r20063595 = 1.0;
double r20063596 = r20063595 - r20063592;
double r20063597 = r20063594 / r20063596;
double r20063598 = r20063593 - r20063597;
double r20063599 = r20063590 * r20063598;
return r20063599;
}
double f(double x, double y, double z, double t) {
double r20063600 = x;
double r20063601 = y;
double r20063602 = 1.0;
double r20063603 = z;
double r20063604 = r20063602 / r20063603;
double r20063605 = t;
double r20063606 = 1.0;
double r20063607 = r20063606 - r20063603;
double r20063608 = r20063605 / r20063607;
double r20063609 = -r20063608;
double r20063610 = fma(r20063601, r20063604, r20063609);
double r20063611 = r20063600 * r20063610;
return r20063611;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.8 |
|---|---|
| Target | 4.3 |
| Herbie | 4.8 |
Initial program 4.8
rmApplied div-inv4.8
Applied fma-neg4.8
Final simplification4.8
herbie shell --seed 2019200 +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)))))