x + \frac{y \cdot \left(z - t\right)}{z - a}\mathsf{fma}\left(\frac{\sqrt[3]{z - t} \cdot \sqrt[3]{z - t}}{\sqrt[3]{z - a} \cdot \sqrt[3]{z - a}}, \frac{\sqrt[3]{z - t}}{\frac{\sqrt[3]{z - a}}{y}}, x\right)double f(double x, double y, double z, double t, double a) {
double r321529 = x;
double r321530 = y;
double r321531 = z;
double r321532 = t;
double r321533 = r321531 - r321532;
double r321534 = r321530 * r321533;
double r321535 = a;
double r321536 = r321531 - r321535;
double r321537 = r321534 / r321536;
double r321538 = r321529 + r321537;
return r321538;
}
double f(double x, double y, double z, double t, double a) {
double r321539 = z;
double r321540 = t;
double r321541 = r321539 - r321540;
double r321542 = cbrt(r321541);
double r321543 = r321542 * r321542;
double r321544 = a;
double r321545 = r321539 - r321544;
double r321546 = cbrt(r321545);
double r321547 = r321546 * r321546;
double r321548 = r321543 / r321547;
double r321549 = y;
double r321550 = r321546 / r321549;
double r321551 = r321542 / r321550;
double r321552 = x;
double r321553 = fma(r321548, r321551, r321552);
return r321553;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.9 |
|---|---|
| Target | 1.1 |
| Herbie | 0.9 |
Initial program 10.9
Simplified3.1
rmApplied clear-num3.4
rmApplied fma-udef3.4
Simplified3.2
rmApplied *-un-lft-identity3.2
Applied add-cube-cbrt3.6
Applied times-frac3.6
Applied add-cube-cbrt3.6
Applied times-frac0.9
Applied fma-def0.9
Final simplification0.9
herbie shell --seed 2019347 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (/ (* y (- z t)) (- z a))))