Average Error: 33.8 → 0.7
Time: 4.9s
Precision: 64
\[\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\]
\[\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \left(\frac{x}{y} \cdot \left(\sqrt[3]{\frac{x}{y}} \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{\frac{1}{y}}\right)\right)\right) \cdot \sqrt[3]{\frac{x}{y}}\right)\]
\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}
\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \left(\frac{x}{y} \cdot \left(\sqrt[3]{\frac{x}{y}} \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{\frac{1}{y}}\right)\right)\right) \cdot \sqrt[3]{\frac{x}{y}}\right)
double f(double x, double y, double z, double t) {
        double r616625 = x;
        double r616626 = r616625 * r616625;
        double r616627 = y;
        double r616628 = r616627 * r616627;
        double r616629 = r616626 / r616628;
        double r616630 = z;
        double r616631 = r616630 * r616630;
        double r616632 = t;
        double r616633 = r616632 * r616632;
        double r616634 = r616631 / r616633;
        double r616635 = r616629 + r616634;
        return r616635;
}

double f(double x, double y, double z, double t) {
        double r616636 = z;
        double r616637 = t;
        double r616638 = r616636 / r616637;
        double r616639 = x;
        double r616640 = y;
        double r616641 = r616639 / r616640;
        double r616642 = cbrt(r616641);
        double r616643 = cbrt(r616639);
        double r616644 = 1.0;
        double r616645 = r616644 / r616640;
        double r616646 = cbrt(r616645);
        double r616647 = r616643 * r616646;
        double r616648 = r616642 * r616647;
        double r616649 = r616641 * r616648;
        double r616650 = r616649 * r616642;
        double r616651 = fma(r616638, r616638, r616650);
        return r616651;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original33.8
Target0.4
Herbie0.7
\[{\left(\frac{x}{y}\right)}^{2} + {\left(\frac{z}{t}\right)}^{2}\]

Derivation

  1. Initial program 33.8

    \[\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\]
  2. Simplified19.3

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x \cdot x}{y \cdot y}\right)}\]
  3. Using strategy rm
  4. Applied times-frac0.4

    \[\leadsto \mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \color{blue}{\frac{x}{y} \cdot \frac{x}{y}}\right)\]
  5. Using strategy rm
  6. Applied add-cube-cbrt0.8

    \[\leadsto \mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x}{y} \cdot \color{blue}{\left(\left(\sqrt[3]{\frac{x}{y}} \cdot \sqrt[3]{\frac{x}{y}}\right) \cdot \sqrt[3]{\frac{x}{y}}\right)}\right)\]
  7. Applied associate-*r*0.8

    \[\leadsto \mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \color{blue}{\left(\frac{x}{y} \cdot \left(\sqrt[3]{\frac{x}{y}} \cdot \sqrt[3]{\frac{x}{y}}\right)\right) \cdot \sqrt[3]{\frac{x}{y}}}\right)\]
  8. Using strategy rm
  9. Applied div-inv0.8

    \[\leadsto \mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \left(\frac{x}{y} \cdot \left(\sqrt[3]{\frac{x}{y}} \cdot \sqrt[3]{\color{blue}{x \cdot \frac{1}{y}}}\right)\right) \cdot \sqrt[3]{\frac{x}{y}}\right)\]
  10. Applied cbrt-prod0.7

    \[\leadsto \mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \left(\frac{x}{y} \cdot \left(\sqrt[3]{\frac{x}{y}} \cdot \color{blue}{\left(\sqrt[3]{x} \cdot \sqrt[3]{\frac{1}{y}}\right)}\right)\right) \cdot \sqrt[3]{\frac{x}{y}}\right)\]
  11. Final simplification0.7

    \[\leadsto \mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \left(\frac{x}{y} \cdot \left(\sqrt[3]{\frac{x}{y}} \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{\frac{1}{y}}\right)\right)\right) \cdot \sqrt[3]{\frac{x}{y}}\right)\]

Reproduce

herbie shell --seed 2019354 +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))))