Average Error: 5.3 → 0.1
Time: 17.2s
Precision: binary64
Cost: 6720
\[x \cdot \left(1 + y \cdot y\right) \]
\[\mathsf{fma}\left(x \cdot y, y, x\right) \]
(FPCore (x y) :precision binary64 (* x (+ 1.0 (* y y))))
(FPCore (x y) :precision binary64 (fma (* x y) y x))
double code(double x, double y) {
	return x * (1.0 + (y * y));
}
double code(double x, double y) {
	return fma((x * y), y, x);
}
function code(x, y)
	return Float64(x * Float64(1.0 + Float64(y * y)))
end
function code(x, y)
	return fma(Float64(x * y), y, x)
end
code[x_, y_] := N[(x * N[(1.0 + N[(y * y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_] := N[(N[(x * y), $MachinePrecision] * y + x), $MachinePrecision]
x \cdot \left(1 + y \cdot y\right)
\mathsf{fma}\left(x \cdot y, y, x\right)

Error

Target

Original5.3
Target0.1
Herbie0.1
\[x + \left(x \cdot y\right) \cdot y \]

Derivation

  1. Initial program 5.3

    \[x \cdot \left(1 + y \cdot y\right) \]
  2. Applied egg-rr0.1

    \[\leadsto \color{blue}{\mathsf{fma}\left(x \cdot y, y, x\right)} \]

Alternatives

Alternative 1
Error0.1
Cost708
\[\begin{array}{l} \mathbf{if}\;y \cdot y \leq 5 \cdot 10^{+14}:\\ \;\;\;\;x \cdot \left(1 + y \cdot y\right)\\ \mathbf{else}:\\ \;\;\;\;\left(y \cdot x\right) \cdot y\\ \end{array} \]
Alternative 2
Error1.2
Cost580
\[\begin{array}{l} \mathbf{if}\;y \cdot y \leq 5 \cdot 10^{-11}:\\ \;\;\;\;x\\ \mathbf{else}:\\ \;\;\;\;\left(y \cdot x\right) \cdot y\\ \end{array} \]
Alternative 3
Error0.1
Cost448
\[\left(x \cdot y\right) \cdot y + x \]
Alternative 4
Error20.2
Cost64
\[x \]

Error

Reproduce

herbie shell --seed 2023010 
(FPCore (x y)
  :name "Numeric.Integration.TanhSinh:everywhere from integration-0.2.1"
  :precision binary64

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

  (* x (+ 1.0 (* y y))))