\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{x + \frac{y}{\frac{t}{1} - \frac{x}{z}}}{x + 1} - \frac{\frac{1}{\frac{t \cdot z - x}{x}}}{x + 1}double f(double x, double y, double z, double t) {
double r757948 = x;
double r757949 = y;
double r757950 = z;
double r757951 = r757949 * r757950;
double r757952 = r757951 - r757948;
double r757953 = t;
double r757954 = r757953 * r757950;
double r757955 = r757954 - r757948;
double r757956 = r757952 / r757955;
double r757957 = r757948 + r757956;
double r757958 = 1.0;
double r757959 = r757948 + r757958;
double r757960 = r757957 / r757959;
return r757960;
}
double f(double x, double y, double z, double t) {
double r757961 = x;
double r757962 = y;
double r757963 = t;
double r757964 = 1.0;
double r757965 = r757963 / r757964;
double r757966 = z;
double r757967 = r757961 / r757966;
double r757968 = r757965 - r757967;
double r757969 = r757962 / r757968;
double r757970 = r757961 + r757969;
double r757971 = 1.0;
double r757972 = r757961 + r757971;
double r757973 = r757970 / r757972;
double r757974 = r757963 * r757966;
double r757975 = r757974 - r757961;
double r757976 = r757975 / r757961;
double r757977 = r757964 / r757976;
double r757978 = r757977 / r757972;
double r757979 = r757973 - r757978;
return r757979;
}




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
rmApplied associate-/l*2.2
rmApplied div-sub2.2
Simplified0.3
rmApplied clear-num0.3
Final simplification0.3
herbie shell --seed 2019322
(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)))