| Alternative 1 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 13376 |
\[\mathsf{fma}\left(1 + \left(\log z - z\right), y, x \cdot 0.5\right)
\]

(FPCore (x y z) :precision binary64 (+ (* x 0.5) (* y (+ (- 1.0 z) (log z)))))
(FPCore (x y z) :precision binary64 (fma (+ 1.0 (- (log z) z)) y (* x 0.5)))
double code(double x, double y, double z) {
return (x * 0.5) + (y * ((1.0 - z) + log(z)));
}
double code(double x, double y, double z) {
return fma((1.0 + (log(z) - z)), y, (x * 0.5));
}
function code(x, y, z) return Float64(Float64(x * 0.5) + Float64(y * Float64(Float64(1.0 - z) + log(z)))) end
function code(x, y, z) return fma(Float64(1.0 + Float64(log(z) - z)), y, Float64(x * 0.5)) end
code[x_, y_, z_] := N[(N[(x * 0.5), $MachinePrecision] + N[(y * N[(N[(1.0 - z), $MachinePrecision] + N[Log[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_] := N[(N[(1.0 + N[(N[Log[z], $MachinePrecision] - z), $MachinePrecision]), $MachinePrecision] * y + N[(x * 0.5), $MachinePrecision]), $MachinePrecision]
x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
\mathsf{fma}\left(1 + \left(\log z - z\right), y, x \cdot 0.5\right)
Herbie found 11 alternatives:
| Alternative | Accuracy | Speedup |
|---|
| Original | 99.9% |
|---|---|
| Target | 99.8% |
| Herbie | 99.9% |
Initial program 99.9%
Applied egg-rr99.9%
[Start]99.9% | \[ x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
\] |
|---|---|
+-commutative [=>]99.9% | \[ \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right) + x \cdot 0.5}
\] |
*-commutative [=>]99.9% | \[ \color{blue}{\left(\left(1 - z\right) + \log z\right) \cdot y} + x \cdot 0.5
\] |
fma-def [=>]99.9% | \[ \color{blue}{\mathsf{fma}\left(\left(1 - z\right) + \log z, y, x \cdot 0.5\right)}
\] |
sub-neg [=>]99.9% | \[ \mathsf{fma}\left(\color{blue}{\left(1 + \left(-z\right)\right)} + \log z, y, x \cdot 0.5\right)
\] |
associate-+l+ [=>]99.9% | \[ \mathsf{fma}\left(\color{blue}{1 + \left(\left(-z\right) + \log z\right)}, y, x \cdot 0.5\right)
\] |
+-commutative [<=]99.9% | \[ \mathsf{fma}\left(1 + \color{blue}{\left(\log z + \left(-z\right)\right)}, y, x \cdot 0.5\right)
\] |
sub-neg [<=]99.9% | \[ \mathsf{fma}\left(1 + \color{blue}{\left(\log z - z\right)}, y, x \cdot 0.5\right)
\] |
Final simplification99.9%
| Alternative 1 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 13376 |
| Alternative 2 | |
|---|---|
| Accuracy | 85.6% |
| Cost | 7368 |
| Alternative 3 | |
|---|---|
| Accuracy | 98.6% |
| Cost | 7108 |
| Alternative 4 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 7104 |
| Alternative 5 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 7104 |
| Alternative 6 | |
|---|---|
| Accuracy | 74.9% |
| Cost | 6916 |
| Alternative 7 | |
|---|---|
| Accuracy | 74.9% |
| Cost | 6852 |
| Alternative 8 | |
|---|---|
| Accuracy | 74.3% |
| Cost | 448 |
| Alternative 9 | |
|---|---|
| Accuracy | 58.9% |
| Cost | 388 |
| Alternative 10 | |
|---|---|
| Accuracy | 39.2% |
| Cost | 192 |
| Alternative 11 | |
|---|---|
| Accuracy | 1.8% |
| Cost | 64 |
herbie shell --seed 2023229
(FPCore (x y z)
:name "System.Random.MWC.Distributions:gamma from mwc-random-0.13.3.2"
:precision binary64
:herbie-target
(- (+ y (* 0.5 x)) (* y (- z (log z))))
(+ (* x 0.5) (* y (+ (- 1.0 z) (log z)))))