Average Error: 0.1 → 0.4
Time: 20.6s
Precision: 64
\[x \cdot \cos y + z \cdot \sin y\]
\[\mathsf{fma}\left(\sin y, z, \left(x \cdot \left(\sqrt[3]{\cos y} \cdot \sqrt[3]{\cos y}\right)\right) \cdot \sqrt[3]{\cos y}\right)\]
x \cdot \cos y + z \cdot \sin y
\mathsf{fma}\left(\sin y, z, \left(x \cdot \left(\sqrt[3]{\cos y} \cdot \sqrt[3]{\cos y}\right)\right) \cdot \sqrt[3]{\cos y}\right)
double f(double x, double y, double z) {
        double r154783 = x;
        double r154784 = y;
        double r154785 = cos(r154784);
        double r154786 = r154783 * r154785;
        double r154787 = z;
        double r154788 = sin(r154784);
        double r154789 = r154787 * r154788;
        double r154790 = r154786 + r154789;
        return r154790;
}

double f(double x, double y, double z) {
        double r154791 = y;
        double r154792 = sin(r154791);
        double r154793 = z;
        double r154794 = x;
        double r154795 = cos(r154791);
        double r154796 = cbrt(r154795);
        double r154797 = r154796 * r154796;
        double r154798 = r154794 * r154797;
        double r154799 = r154798 * r154796;
        double r154800 = fma(r154792, r154793, r154799);
        return r154800;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 0.1

    \[x \cdot \cos y + z \cdot \sin y\]
  2. Simplified0.1

    \[\leadsto \color{blue}{\mathsf{fma}\left(\sin y, z, x \cdot \cos y\right)}\]
  3. Using strategy rm
  4. Applied add-cube-cbrt0.4

    \[\leadsto \mathsf{fma}\left(\sin y, z, x \cdot \color{blue}{\left(\left(\sqrt[3]{\cos y} \cdot \sqrt[3]{\cos y}\right) \cdot \sqrt[3]{\cos y}\right)}\right)\]
  5. Applied associate-*r*0.4

    \[\leadsto \mathsf{fma}\left(\sin y, z, \color{blue}{\left(x \cdot \left(\sqrt[3]{\cos y} \cdot \sqrt[3]{\cos y}\right)\right) \cdot \sqrt[3]{\cos y}}\right)\]
  6. Final simplification0.4

    \[\leadsto \mathsf{fma}\left(\sin y, z, \left(x \cdot \left(\sqrt[3]{\cos y} \cdot \sqrt[3]{\cos y}\right)\right) \cdot \sqrt[3]{\cos y}\right)\]

Reproduce

herbie shell --seed 2019194 +o rules:numerics
(FPCore (x y z)
  :name "Diagrams.ThreeD.Transform:aboutY from diagrams-lib-1.3.0.3"
  (+ (* x (cos y)) (* z (sin y))))