\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\left(\left(\sqrt[3]{\sqrt{\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x}{y} \cdot \frac{x}{y}\right)}} \cdot \sqrt[3]{\sqrt{\sqrt{\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x}{y} \cdot \frac{x}{y}\right)}} \cdot \sqrt{\sqrt{\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x}{y} \cdot \frac{x}{y}\right)}}}\right) \cdot \sqrt[3]{\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x}{y} \cdot \frac{x}{y}\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x}{y} \cdot \frac{x}{y}\right)}double f(double x, double y, double z, double t) {
double r922624 = x;
double r922625 = r922624 * r922624;
double r922626 = y;
double r922627 = r922626 * r922626;
double r922628 = r922625 / r922627;
double r922629 = z;
double r922630 = r922629 * r922629;
double r922631 = t;
double r922632 = r922631 * r922631;
double r922633 = r922630 / r922632;
double r922634 = r922628 + r922633;
return r922634;
}
double f(double x, double y, double z, double t) {
double r922635 = z;
double r922636 = t;
double r922637 = r922635 / r922636;
double r922638 = x;
double r922639 = y;
double r922640 = r922638 / r922639;
double r922641 = r922640 * r922640;
double r922642 = fma(r922637, r922637, r922641);
double r922643 = sqrt(r922642);
double r922644 = cbrt(r922643);
double r922645 = sqrt(r922643);
double r922646 = r922645 * r922645;
double r922647 = cbrt(r922646);
double r922648 = r922644 * r922647;
double r922649 = cbrt(r922642);
double r922650 = r922648 * r922649;
double r922651 = r922650 * r922649;
return r922651;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 33.2 |
|---|---|
| Target | 0.4 |
| Herbie | 1.2 |
Initial program 33.2
Simplified18.7
rmApplied times-frac0.4
rmApplied add-cube-cbrt1.2
rmApplied add-sqr-sqrt1.2
Applied cbrt-prod1.2
rmApplied add-sqr-sqrt1.2
Applied sqrt-prod1.2
Final simplification1.2
herbie shell --seed 2020034 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rasterific.Svg.PathConverter:arcToSegments from rasterific-svg-0.2.3.1"
:precision binary64
:herbie-target
(+ (pow (/ x y) 2) (pow (/ z t) 2))
(+ (/ (* x x) (* y y)) (/ (* z z) (* t t))))