\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\frac{y}{t - \frac{x}{z}} + x}{x + 1} - \frac{\frac{1}{\frac{t}{\frac{x}{z}} + -1}}{x + 1}double f(double x, double y, double z, double t) {
double r375418 = x;
double r375419 = y;
double r375420 = z;
double r375421 = r375419 * r375420;
double r375422 = r375421 - r375418;
double r375423 = t;
double r375424 = r375423 * r375420;
double r375425 = r375424 - r375418;
double r375426 = r375422 / r375425;
double r375427 = r375418 + r375426;
double r375428 = 1.0;
double r375429 = r375418 + r375428;
double r375430 = r375427 / r375429;
return r375430;
}
double f(double x, double y, double z, double t) {
double r375431 = y;
double r375432 = t;
double r375433 = x;
double r375434 = z;
double r375435 = r375433 / r375434;
double r375436 = r375432 - r375435;
double r375437 = r375431 / r375436;
double r375438 = r375437 + r375433;
double r375439 = 1.0;
double r375440 = r375433 + r375439;
double r375441 = r375438 / r375440;
double r375442 = 1.0;
double r375443 = r375432 / r375435;
double r375444 = -1.0;
double r375445 = r375443 + r375444;
double r375446 = r375442 / r375445;
double r375447 = r375446 / r375440;
double r375448 = r375441 - r375447;
return r375448;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.7 |
|---|---|
| Target | 0.3 |
| Herbie | 0.3 |
Initial program 7.7
rmApplied div-sub7.7
Applied associate-+r-7.7
Applied div-sub7.7
Simplified4.7
rmApplied clear-num4.7
Simplified5.3
rmApplied fma-udef5.3
Simplified0.9
rmApplied fma-udef0.9
Simplified0.3
Final simplification0.3
herbie shell --seed 2019322 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))