\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\frac{y}{1}}{\frac{x + 1}{\frac{z}{t \cdot z - x}}} - \frac{\frac{x}{t \cdot z - x} - x}{x + 1}double f(double x, double y, double z, double t) {
double r627638 = x;
double r627639 = y;
double r627640 = z;
double r627641 = r627639 * r627640;
double r627642 = r627641 - r627638;
double r627643 = t;
double r627644 = r627643 * r627640;
double r627645 = r627644 - r627638;
double r627646 = r627642 / r627645;
double r627647 = r627638 + r627646;
double r627648 = 1.0;
double r627649 = r627638 + r627648;
double r627650 = r627647 / r627649;
return r627650;
}
double f(double x, double y, double z, double t) {
double r627651 = y;
double r627652 = 1.0;
double r627653 = r627651 / r627652;
double r627654 = x;
double r627655 = 1.0;
double r627656 = r627654 + r627655;
double r627657 = z;
double r627658 = t;
double r627659 = r627658 * r627657;
double r627660 = r627659 - r627654;
double r627661 = r627657 / r627660;
double r627662 = r627656 / r627661;
double r627663 = r627653 / r627662;
double r627664 = r627654 / r627660;
double r627665 = r627664 - r627654;
double r627666 = r627665 / r627656;
double r627667 = r627663 - r627666;
return r627667;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.6 |
|---|---|
| Target | 0.4 |
| Herbie | 1.9 |
Initial program 7.6
rmApplied div-inv7.6
rmApplied *-un-lft-identity7.6
Applied *-un-lft-identity7.6
Applied times-frac7.6
Simplified7.6
Simplified7.6
rmApplied div-sub7.6
Applied associate-+l-7.6
Applied div-sub7.6
rmApplied *-un-lft-identity7.6
Applied times-frac2.3
Applied associate-/l*1.9
Final simplification1.9
herbie shell --seed 2020083
(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)))