x + \frac{y \cdot \left(z - t\right)}{z - a}x + \left(\mathsf{fma}\left(\frac{-1}{z - a}, t, t \cdot \frac{1}{z - a}\right) \cdot y + \mathsf{fma}\left(1, \frac{1}{\frac{z - a}{z}}, t \cdot \frac{-1}{z - a}\right) \cdot y\right)double f(double x, double y, double z, double t, double a) {
double r21237475 = x;
double r21237476 = y;
double r21237477 = z;
double r21237478 = t;
double r21237479 = r21237477 - r21237478;
double r21237480 = r21237476 * r21237479;
double r21237481 = a;
double r21237482 = r21237477 - r21237481;
double r21237483 = r21237480 / r21237482;
double r21237484 = r21237475 + r21237483;
return r21237484;
}
double f(double x, double y, double z, double t, double a) {
double r21237485 = x;
double r21237486 = -1.0;
double r21237487 = z;
double r21237488 = a;
double r21237489 = r21237487 - r21237488;
double r21237490 = r21237486 / r21237489;
double r21237491 = t;
double r21237492 = 1.0;
double r21237493 = r21237492 / r21237489;
double r21237494 = r21237491 * r21237493;
double r21237495 = fma(r21237490, r21237491, r21237494);
double r21237496 = y;
double r21237497 = r21237495 * r21237496;
double r21237498 = r21237489 / r21237487;
double r21237499 = r21237492 / r21237498;
double r21237500 = r21237491 * r21237490;
double r21237501 = fma(r21237492, r21237499, r21237500);
double r21237502 = r21237501 * r21237496;
double r21237503 = r21237497 + r21237502;
double r21237504 = r21237485 + r21237503;
return r21237504;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.3 |
|---|---|
| Target | 1.2 |
| Herbie | 1.3 |
Initial program 10.3
Simplified1.3
rmApplied div-sub1.3
rmApplied fma-udef1.3
rmApplied clear-num1.3
rmApplied div-inv1.3
Applied *-un-lft-identity1.3
Applied prod-diff1.3
Applied distribute-rgt-in1.3
Final simplification1.3
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, A"
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (/ (* y (- z t)) (- z a))))