\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{y}{\left(x + 1\right) \cdot \left(t - \frac{x}{z}\right)} - \frac{\frac{x}{z \cdot t - x} - x}{x + 1}double f(double x, double y, double z, double t) {
double r620548 = x;
double r620549 = y;
double r620550 = z;
double r620551 = r620549 * r620550;
double r620552 = r620551 - r620548;
double r620553 = t;
double r620554 = r620553 * r620550;
double r620555 = r620554 - r620548;
double r620556 = r620552 / r620555;
double r620557 = r620548 + r620556;
double r620558 = 1.0;
double r620559 = r620548 + r620558;
double r620560 = r620557 / r620559;
return r620560;
}
double f(double x, double y, double z, double t) {
double r620561 = y;
double r620562 = x;
double r620563 = 1.0;
double r620564 = r620562 + r620563;
double r620565 = t;
double r620566 = z;
double r620567 = r620562 / r620566;
double r620568 = r620565 - r620567;
double r620569 = r620564 * r620568;
double r620570 = r620561 / r620569;
double r620571 = r620566 * r620565;
double r620572 = r620571 - r620562;
double r620573 = r620562 / r620572;
double r620574 = r620573 - r620562;
double r620575 = r620574 / r620564;
double r620576 = r620570 - r620575;
return r620576;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.1 |
|---|---|
| Target | 0.4 |
| Herbie | 0.1 |
Initial program 7.1
Simplified7.1
rmApplied div-sub7.1
Simplified2.2
Taylor expanded around 0 0.4
rmApplied associate-+l-0.4
Applied div-sub0.4
Simplified0.1
Simplified0.1
rmApplied div-inv0.1
Applied associate-/l*0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019194
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1.0))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)))