| Alternative 1 | |
|---|---|
| Accuracy | 98.2% |
| Cost | 7040 |
\[\mathsf{fma}\left(x, y, t \cdot \left(-z\right)\right) \cdot \frac{1}{a}
\]

(FPCore (x y z t a) :precision binary64 (/ (- (* x y) (* z t)) a))
(FPCore (x y z t a) :precision binary64 (* (fma x y (* t (- z))) (/ 1.0 a)))
double code(double x, double y, double z, double t, double a) {
return ((x * y) - (z * t)) / a;
}
double code(double x, double y, double z, double t, double a) {
return fma(x, y, (t * -z)) * (1.0 / a);
}
function code(x, y, z, t, a) return Float64(Float64(Float64(x * y) - Float64(z * t)) / a) end
function code(x, y, z, t, a) return Float64(fma(x, y, Float64(t * Float64(-z))) * Float64(1.0 / a)) end
code[x_, y_, z_, t_, a_] := N[(N[(N[(x * y), $MachinePrecision] - N[(z * t), $MachinePrecision]), $MachinePrecision] / a), $MachinePrecision]
code[x_, y_, z_, t_, a_] := N[(N[(x * y + N[(t * (-z)), $MachinePrecision]), $MachinePrecision] * N[(1.0 / a), $MachinePrecision]), $MachinePrecision]
\frac{x \cdot y - z \cdot t}{a}
\mathsf{fma}\left(x, y, t \cdot \left(-z\right)\right) \cdot \frac{1}{a}
Herbie found 8 alternatives:
| Alternative | Accuracy | Speedup |
|---|
| Original | 97.8% |
|---|---|
| Target | 92.4% |
| Herbie | 98.2% |
Initial program 97.5%
Applied egg-rr98.2%
[Start]97.5% | \[ \frac{x \cdot y - z \cdot t}{a}
\] |
|---|---|
div-inv [=>]97.4% | \[ \color{blue}{\left(x \cdot y - z \cdot t\right) \cdot \frac{1}{a}}
\] |
fma-neg [=>]98.2% | \[ \color{blue}{\mathsf{fma}\left(x, y, -z \cdot t\right)} \cdot \frac{1}{a}
\] |
*-commutative [=>]98.2% | \[ \mathsf{fma}\left(x, y, -\color{blue}{t \cdot z}\right) \cdot \frac{1}{a}
\] |
distribute-rgt-neg-in [=>]98.2% | \[ \mathsf{fma}\left(x, y, \color{blue}{t \cdot \left(-z\right)}\right) \cdot \frac{1}{a}
\] |
Final simplification98.2%
| Alternative 1 | |
|---|---|
| Accuracy | 98.2% |
| Cost | 7040 |
| Alternative 2 | |
|---|---|
| Accuracy | 64.6% |
| Cost | 648 |
| Alternative 3 | |
|---|---|
| Accuracy | 66.4% |
| Cost | 648 |
| Alternative 4 | |
|---|---|
| Accuracy | 97.8% |
| Cost | 576 |
| Alternative 5 | |
|---|---|
| Accuracy | 50.9% |
| Cost | 452 |
| Alternative 6 | |
|---|---|
| Accuracy | 52.3% |
| Cost | 452 |
| Alternative 7 | |
|---|---|
| Accuracy | 51.0% |
| Cost | 320 |
| Alternative 8 | |
|---|---|
| Accuracy | 52.8% |
| Cost | 320 |
herbie shell --seed 2023277
(FPCore (x y z t a)
:name "Data.Colour.Matrix:inverse from colour-2.3.3, B"
:precision binary64
:herbie-target
(if (< z -2.468684968699548e+170) (- (* (/ y a) x) (* (/ t a) z)) (if (< z 6.309831121978371e-71) (/ (- (* x y) (* z t)) a) (- (* (/ y a) x) (* (/ t a) z))))
(/ (- (* x y) (* z t)) a))