\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{y \cdot \frac{z}{t \cdot z - x} - \left(\frac{1}{-1 + \frac{z}{\frac{x}{t}}} - x\right)}{x + 1}double f(double x, double y, double z, double t) {
double r580183 = x;
double r580184 = y;
double r580185 = z;
double r580186 = r580184 * r580185;
double r580187 = r580186 - r580183;
double r580188 = t;
double r580189 = r580188 * r580185;
double r580190 = r580189 - r580183;
double r580191 = r580187 / r580190;
double r580192 = r580183 + r580191;
double r580193 = 1.0;
double r580194 = r580183 + r580193;
double r580195 = r580192 / r580194;
return r580195;
}
double f(double x, double y, double z, double t) {
double r580196 = y;
double r580197 = z;
double r580198 = t;
double r580199 = r580198 * r580197;
double r580200 = x;
double r580201 = r580199 - r580200;
double r580202 = r580197 / r580201;
double r580203 = r580196 * r580202;
double r580204 = 1.0;
double r580205 = -1.0;
double r580206 = r580200 / r580198;
double r580207 = r580197 / r580206;
double r580208 = r580205 + r580207;
double r580209 = r580204 / r580208;
double r580210 = r580209 - r580200;
double r580211 = r580203 - r580210;
double r580212 = 1.0;
double r580213 = r580200 + r580212;
double r580214 = r580211 / r580213;
return r580214;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.4 |
|---|---|
| Target | 0.3 |
| Herbie | 2.8 |
Initial program 7.4
Simplified7.4
rmApplied div-sub7.4
Simplified4.4
rmApplied *-un-lft-identity4.4
Applied *-un-lft-identity4.4
Applied times-frac4.4
Simplified4.4
Simplified2.3
rmApplied clear-num2.3
Simplified2.8
Final simplification2.8
herbie shell --seed 2019196
(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)))