| Alternative 1 | |
|---|---|
| Accuracy | 100.0% |
| Cost | 6848 |
\[\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));
}
function code(x, y, z) return Float64(Float64(Float64(x * y) / 2.0) - Float64(z / 8.0)) end
function code(x, y, z) return fma(x, Float64(y / 2.0), Float64(z * -0.125)) end
code[x_, y_, z_] := N[(N[(N[(x * y), $MachinePrecision] / 2.0), $MachinePrecision] - N[(z / 8.0), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_] := N[(x * N[(y / 2.0), $MachinePrecision] + N[(z * -0.125), $MachinePrecision]), $MachinePrecision]
\frac{x \cdot y}{2} - \frac{z}{8}
\begin{array}{l}
\\
\mathsf{fma}\left(x, \frac{y}{2}, z \cdot -0.125\right)
\end{array}
Herbie found 4 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Initial program 100.0%
Simplified100.0%
[Start]100.0% | \[ \frac{x \cdot y}{2} - \frac{z}{8}
\] |
|---|---|
associate-*r/ [<=]100.0% | \[ \color{blue}{x \cdot \frac{y}{2}} - \frac{z}{8}
\] |
*-commutative [<=]100.0% | \[ \color{blue}{\frac{y}{2} \cdot x} - \frac{z}{8}
\] |
*-commutative [=>]100.0% | \[ \color{blue}{x \cdot \frac{y}{2}} - \frac{z}{8}
\] |
fma-neg [=>]100.0% | \[ \color{blue}{\mathsf{fma}\left(x, \frac{y}{2}, -\frac{z}{8}\right)}
\] |
distribute-neg-frac [=>]100.0% | \[ \mathsf{fma}\left(x, \frac{y}{2}, \color{blue}{\frac{-z}{8}}\right)
\] |
neg-mul-1 [=>]100.0% | \[ \mathsf{fma}\left(x, \frac{y}{2}, \frac{\color{blue}{-1 \cdot z}}{8}\right)
\] |
associate-/l* [=>]99.9% | \[ \mathsf{fma}\left(x, \frac{y}{2}, \color{blue}{\frac{-1}{\frac{8}{z}}}\right)
\] |
associate-/r/ [=>]100.0% | \[ \mathsf{fma}\left(x, \frac{y}{2}, \color{blue}{\frac{-1}{8} \cdot z}\right)
\] |
*-commutative [=>]100.0% | \[ \mathsf{fma}\left(x, \frac{y}{2}, \color{blue}{z \cdot \frac{-1}{8}}\right)
\] |
metadata-eval [=>]100.0% | \[ \mathsf{fma}\left(x, \frac{y}{2}, z \cdot \color{blue}{-0.125}\right)
\] |
Final simplification100.0%
| Alternative 1 | |
|---|---|
| Accuracy | 100.0% |
| Cost | 6848 |
| Alternative 2 | |
|---|---|
| Accuracy | 67.9% |
| Cost | 850 |
| Alternative 3 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 576 |
| Alternative 4 | |
|---|---|
| Accuracy | 50.6% |
| Cost | 192 |
herbie shell --seed 2023167
(FPCore (x y z)
:name "Diagrams.Solve.Polynomial:quartForm from diagrams-solve-0.1, D"
:precision binary64
(- (/ (* x y) 2.0) (/ z 8.0)))