Average Error: 0.1 → 0.1
Time: 3.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 code(double x, double y, double z) {
	return ((x * cos(y)) - (z * sin(y)));
}
double code(double x, double y, double z) {
	return fma(x, cos(y), -(z * sin(y)));
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

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 2020078 +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))))