Average Error: 0.0 → 0
Time: 880.0ms
Precision: binary64
\[\left(x + y\right) + x \]
\[\mathsf{fma}\left(x, 2, y\right) \]
(FPCore (x y) :precision binary64 (+ (+ x y) x))
(FPCore (x y) :precision binary64 (fma x 2.0 y))
double code(double x, double y) {
	return (x + y) + x;
}
double code(double x, double y) {
	return fma(x, 2.0, y);
}
function code(x, y)
	return Float64(Float64(x + y) + x)
end
function code(x, y)
	return fma(x, 2.0, y)
end
code[x_, y_] := N[(N[(x + y), $MachinePrecision] + x), $MachinePrecision]
code[x_, y_] := N[(x * 2.0 + y), $MachinePrecision]
\left(x + y\right) + x
\mathsf{fma}\left(x, 2, y\right)

Error

Bits error versus x

Bits error versus y

Target

Original0.0
Target0
Herbie0
\[y + 2 \cdot x \]

Derivation

  1. Initial program 0.0

    \[\left(x + y\right) + x \]
  2. Simplified0

    \[\leadsto \color{blue}{\mathsf{fma}\left(x, 2, y\right)} \]
  3. Final simplification0

    \[\leadsto \mathsf{fma}\left(x, 2, y\right) \]

Reproduce

herbie shell --seed 2022150 
(FPCore (x y)
  :name "Graphics.Rendering.Plot.Render.Plot.Legend:renderLegendOutside from plot-0.2.3.4, A"
  :precision binary64

  :herbie-target
  (+ y (* 2.0 x))

  (+ (+ x y) x))