\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{1 + x} - \frac{x \cdot \frac{1}{t \cdot z - x}}{x + 1}double f(double x, double y, double z, double t) {
double r412258 = x;
double r412259 = y;
double r412260 = z;
double r412261 = r412259 * r412260;
double r412262 = r412261 - r412258;
double r412263 = t;
double r412264 = r412263 * r412260;
double r412265 = r412264 - r412258;
double r412266 = r412262 / r412265;
double r412267 = r412258 + r412266;
double r412268 = 1.0;
double r412269 = r412258 + r412268;
double r412270 = r412267 / r412269;
return r412270;
}
double f(double x, double y, double z, double t) {
double r412271 = y;
double r412272 = t;
double r412273 = z;
double r412274 = r412272 * r412273;
double r412275 = x;
double r412276 = r412274 - r412275;
double r412277 = r412271 / r412276;
double r412278 = fma(r412277, r412273, r412275);
double r412279 = 1.0;
double r412280 = r412279 + r412275;
double r412281 = r412278 / r412280;
double r412282 = 1.0;
double r412283 = r412282 / r412276;
double r412284 = r412275 * r412283;
double r412285 = r412275 + r412279;
double r412286 = r412284 / r412285;
double r412287 = r412281 - r412286;
return r412287;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.3 |
|---|---|
| Target | 0.3 |
| Herbie | 4.6 |
Initial program 7.3
rmApplied div-sub7.3
Applied associate-+r-7.3
Applied div-sub7.3
Simplified4.6
rmApplied div-inv4.6
Final simplification4.6
herbie shell --seed 2019325 +o rules:numerics
(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)))