Average Error: 0.1 → 0.1
Time: 19.4s
Precision: 64
\[x \cdot \sin y + z \cdot \cos y\]
\[\mathsf{fma}\left(x, \sin y, z \cdot \cos y\right)\]
x \cdot \sin y + z \cdot \cos y
\mathsf{fma}\left(x, \sin y, z \cdot \cos y\right)
double f(double x, double y, double z) {
        double r14515968 = x;
        double r14515969 = y;
        double r14515970 = sin(r14515969);
        double r14515971 = r14515968 * r14515970;
        double r14515972 = z;
        double r14515973 = cos(r14515969);
        double r14515974 = r14515972 * r14515973;
        double r14515975 = r14515971 + r14515974;
        return r14515975;
}

double f(double x, double y, double z) {
        double r14515976 = x;
        double r14515977 = y;
        double r14515978 = sin(r14515977);
        double r14515979 = z;
        double r14515980 = cos(r14515977);
        double r14515981 = r14515979 * r14515980;
        double r14515982 = fma(r14515976, r14515978, r14515981);
        return r14515982;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 0.1

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

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

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

Reproduce

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