\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\left(\frac{1}{\frac{t - \frac{x}{z}}{y}} - \frac{1}{\frac{t \cdot z - x}{x}}\right) + x}{x + 1}double f(double x, double y, double z, double t) {
double r459954 = x;
double r459955 = y;
double r459956 = z;
double r459957 = r459955 * r459956;
double r459958 = r459957 - r459954;
double r459959 = t;
double r459960 = r459959 * r459956;
double r459961 = r459960 - r459954;
double r459962 = r459958 / r459961;
double r459963 = r459954 + r459962;
double r459964 = 1.0;
double r459965 = r459954 + r459964;
double r459966 = r459963 / r459965;
return r459966;
}
double f(double x, double y, double z, double t) {
double r459967 = 1.0;
double r459968 = t;
double r459969 = x;
double r459970 = z;
double r459971 = r459969 / r459970;
double r459972 = r459968 - r459971;
double r459973 = y;
double r459974 = r459972 / r459973;
double r459975 = r459967 / r459974;
double r459976 = r459968 * r459970;
double r459977 = r459976 - r459969;
double r459978 = r459977 / r459969;
double r459979 = r459967 / r459978;
double r459980 = r459975 - r459979;
double r459981 = r459980 + r459969;
double r459982 = 1.0;
double r459983 = r459969 + r459982;
double r459984 = r459981 / r459983;
return r459984;
}




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.4 |
Initial program 7.7
rmApplied div-sub7.7
Simplified2.3
rmApplied clear-num2.3
rmApplied pow12.3
Applied pow12.3
Applied pow-prod-down2.3
Simplified0.3
rmApplied clear-num0.4
Final simplification0.4
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)))