Average Error: 16.2 → 0.3
Time: 23.8s
Precision: binary64
Cost: 900
\[-\left(\left(a \cdot a\right) \cdot b\right) \cdot b \]
\[-\left(\left(a \cdot b\right) \cdot 3\right) \cdot \begin{array}{l} \mathbf{if}\;b \ne 0:\\ \;\;\;\;\frac{a}{\frac{3}{b}}\\ \mathbf{else}:\\ \;\;\;\;\left(0.3333333333333333 \cdot b\right) \cdot a\\ \end{array} \]
(FPCore (a b) :precision binary64 (- (* (* (* a a) b) b)))
(FPCore (a b)
 :precision binary64
 (-
  (*
   (* (* a b) 3.0)
   (if (!= b 0.0) (/ a (/ 3.0 b)) (* (* 0.3333333333333333 b) a)))))
double code(double a, double b) {
	return -(((a * a) * b) * b);
}
double code(double a, double b) {
	double tmp;
	if (b != 0.0) {
		tmp = a / (3.0 / b);
	} else {
		tmp = (0.3333333333333333 * b) * a;
	}
	return -(((a * b) * 3.0) * tmp);
}
real(8) function code(a, b)
    real(8), intent (in) :: a
    real(8), intent (in) :: b
    code = -(((a * a) * b) * b)
end function
real(8) function code(a, b)
    real(8), intent (in) :: a
    real(8), intent (in) :: b
    real(8) :: tmp
    if (b /= 0.0d0) then
        tmp = a / (3.0d0 / b)
    else
        tmp = (0.3333333333333333d0 * b) * a
    end if
    code = -(((a * b) * 3.0d0) * tmp)
end function
public static double code(double a, double b) {
	return -(((a * a) * b) * b);
}
public static double code(double a, double b) {
	double tmp;
	if (b != 0.0) {
		tmp = a / (3.0 / b);
	} else {
		tmp = (0.3333333333333333 * b) * a;
	}
	return -(((a * b) * 3.0) * tmp);
}
def code(a, b):
	return -(((a * a) * b) * b)
def code(a, b):
	tmp = 0
	if b != 0.0:
		tmp = a / (3.0 / b)
	else:
		tmp = (0.3333333333333333 * b) * a
	return -(((a * b) * 3.0) * tmp)
function code(a, b)
	return Float64(-Float64(Float64(Float64(a * a) * b) * b))
end
function code(a, b)
	tmp = 0.0
	if (b != 0.0)
		tmp = Float64(a / Float64(3.0 / b));
	else
		tmp = Float64(Float64(0.3333333333333333 * b) * a);
	end
	return Float64(-Float64(Float64(Float64(a * b) * 3.0) * tmp))
end
function tmp = code(a, b)
	tmp = -(((a * a) * b) * b);
end
function tmp_2 = code(a, b)
	tmp = 0.0;
	if (b ~= 0.0)
		tmp = a / (3.0 / b);
	else
		tmp = (0.3333333333333333 * b) * a;
	end
	tmp_2 = -(((a * b) * 3.0) * tmp);
end
code[a_, b_] := (-N[(N[(N[(a * a), $MachinePrecision] * b), $MachinePrecision] * b), $MachinePrecision])
code[a_, b_] := (-N[(N[(N[(a * b), $MachinePrecision] * 3.0), $MachinePrecision] * If[Unequal[b, 0.0], N[(a / N[(3.0 / b), $MachinePrecision]), $MachinePrecision], N[(N[(0.3333333333333333 * b), $MachinePrecision] * a), $MachinePrecision]]), $MachinePrecision])
-\left(\left(a \cdot a\right) \cdot b\right) \cdot b
-\left(\left(a \cdot b\right) \cdot 3\right) \cdot \begin{array}{l}
\mathbf{if}\;b \ne 0:\\
\;\;\;\;\frac{a}{\frac{3}{b}}\\

\mathbf{else}:\\
\;\;\;\;\left(0.3333333333333333 \cdot b\right) \cdot a\\


\end{array}

Error

Derivation

  1. Initial program 16.2

    \[-\left(\left(a \cdot a\right) \cdot b\right) \cdot b \]
  2. Applied egg-rr0.8

    \[\leadsto -\color{blue}{{\left(\sqrt[3]{{\left(a \cdot b\right)}^{2}}\right)}^{3}} \]
  3. Applied egg-rr0.4

    \[\leadsto -\color{blue}{\frac{\frac{{\left(a \cdot b\right)}^{2}}{0.3333333333333333}}{3}} \]
  4. Applied egg-rr0.4

    \[\leadsto -\color{blue}{\left(\left(a \cdot b\right) \cdot 3\right) \cdot \left(0.3333333333333333 \cdot \left(a \cdot b\right)\right)} \]
  5. Applied egg-rr0.3

    \[\leadsto -\left(\left(a \cdot b\right) \cdot 3\right) \cdot \color{blue}{\begin{array}{l} \color{blue}{\mathbf{if}\;b \ne 0:\\ \;\;\;\;\frac{a}{\frac{3}{b}}\\ \mathbf{else}:\\ \;\;\;\;\left(0.3333333333333333 \cdot b\right) \cdot a\\ } \end{array}} \]

Alternatives

Alternative 1
Error0.3
Cost512
\[-\left(a \cdot b\right) \cdot \left(a \cdot b\right) \]

Error

Reproduce

herbie shell --seed 2023010 
(FPCore (a b)
  :name "ab-angle->ABCF D"
  :precision binary64
  (- (* (* (* a a) b) b)))