Average Error: 0.1 → 0.1
Time: 4.7s
Precision: 64
\[x \cdot \cos y - z \cdot \sin y\]
\[\mathsf{fma}\left(x, \cos y, -z \cdot \sin y\right)\]
x \cdot \cos y - z \cdot \sin y
\mathsf{fma}\left(x, \cos y, -z \cdot \sin y\right)
double f(double x, double y, double z) {
        double r186672 = x;
        double r186673 = y;
        double r186674 = cos(r186673);
        double r186675 = r186672 * r186674;
        double r186676 = z;
        double r186677 = sin(r186673);
        double r186678 = r186676 * r186677;
        double r186679 = r186675 - r186678;
        return r186679;
}

double f(double x, double y, double z) {
        double r186680 = x;
        double r186681 = y;
        double r186682 = cos(r186681);
        double r186683 = z;
        double r186684 = sin(r186681);
        double r186685 = r186683 * r186684;
        double r186686 = -r186685;
        double r186687 = fma(r186680, r186682, r186686);
        return r186687;
}

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. Using strategy rm
  3. Applied fma-neg0.1

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

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

Reproduce

herbie shell --seed 2020036 +o rules:numerics
(FPCore (x y z)
  :name "Diagrams.ThreeD.Transform:aboutX from diagrams-lib-1.3.0.3, A"
  :precision binary64
  (- (* x (cos y)) (* z (sin y))))