Average Error: 0.0 → 0.0
Time: 1.9s
Precision: binary64
\[\frac{x \cdot y}{2} - \frac{z}{8} \]
\[\mathsf{fma}\left(x, \frac{y}{2}, z \cdot -0.125\right) \]
\frac{x \cdot y}{2} - \frac{z}{8}
\mathsf{fma}\left(x, \frac{y}{2}, z \cdot -0.125\right)
(FPCore (x y z) :precision binary64 (- (/ (* x y) 2.0) (/ z 8.0)))
(FPCore (x y z) :precision binary64 (fma x (/ y 2.0) (* z -0.125)))
double code(double x, double y, double z) {
	return ((x * y) / 2.0) - (z / 8.0);
}
double code(double x, double y, double z) {
	return fma(x, (y / 2.0), (z * -0.125));
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 0.0

    \[\frac{x \cdot y}{2} - \frac{z}{8} \]
  2. Simplified0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(z, -0.125, \frac{x \cdot y}{2}\right)} \]
  3. Applied add-sqr-sqrt_binary640.5

    \[\leadsto \mathsf{fma}\left(z, -0.125, \frac{x \cdot y}{\color{blue}{\sqrt{2} \cdot \sqrt{2}}}\right) \]
  4. Applied times-frac_binary640.4

    \[\leadsto \mathsf{fma}\left(z, -0.125, \color{blue}{\frac{x}{\sqrt{2}} \cdot \frac{y}{\sqrt{2}}}\right) \]
  5. Taylor expanded in z around 0 0.5

    \[\leadsto \color{blue}{\frac{y \cdot x}{{\left(\sqrt{2}\right)}^{2}} - 0.125 \cdot z} \]
  6. Simplified0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(x, \frac{y}{2}, z \cdot -0.125\right)} \]
  7. Final simplification0.0

    \[\leadsto \mathsf{fma}\left(x, \frac{y}{2}, z \cdot -0.125\right) \]

Reproduce

herbie shell --seed 2022081 
(FPCore (x y z)
  :name "Diagrams.Solve.Polynomial:quartForm  from diagrams-solve-0.1, D"
  :precision binary64
  (- (/ (* x y) 2.0) (/ z 8.0)))