Average Error: 7.3 → 0.3
Time: 8.7s
Precision: binary64
Cost: 7304
\[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
\[\begin{array}{l} \mathbf{if}\;x.re \leq -5 \cdot 10^{+151}:\\ \;\;\;\;3 \cdot \left(x.re \cdot \left(x.re \cdot x.im\right)\right)\\ \mathbf{elif}\;x.re \leq 5.5 \cdot 10^{+81}:\\ \;\;\;\;3 \cdot \left(x.im \cdot \left(x.re \cdot x.re\right)\right) - {x.im}^{3}\\ \mathbf{else}:\\ \;\;\;\;x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right)\\ \end{array} \]
(FPCore (x.re x.im)
 :precision binary64
 (+
  (* (- (* x.re x.re) (* x.im x.im)) x.im)
  (* (+ (* x.re x.im) (* x.im x.re)) x.re)))
(FPCore (x.re x.im)
 :precision binary64
 (if (<= x.re -5e+151)
   (* 3.0 (* x.re (* x.re x.im)))
   (if (<= x.re 5.5e+81)
     (- (* 3.0 (* x.im (* x.re x.re))) (pow x.im 3.0))
     (* x.re (* x.re (* x.im 3.0))))))
double code(double x_46_re, double x_46_im) {
	return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re);
}
double code(double x_46_re, double x_46_im) {
	double tmp;
	if (x_46_re <= -5e+151) {
		tmp = 3.0 * (x_46_re * (x_46_re * x_46_im));
	} else if (x_46_re <= 5.5e+81) {
		tmp = (3.0 * (x_46_im * (x_46_re * x_46_re))) - pow(x_46_im, 3.0);
	} else {
		tmp = x_46_re * (x_46_re * (x_46_im * 3.0));
	}
	return tmp;
}
real(8) function code(x_46re, x_46im)
    real(8), intent (in) :: x_46re
    real(8), intent (in) :: x_46im
    code = (((x_46re * x_46re) - (x_46im * x_46im)) * x_46im) + (((x_46re * x_46im) + (x_46im * x_46re)) * x_46re)
end function
real(8) function code(x_46re, x_46im)
    real(8), intent (in) :: x_46re
    real(8), intent (in) :: x_46im
    real(8) :: tmp
    if (x_46re <= (-5d+151)) then
        tmp = 3.0d0 * (x_46re * (x_46re * x_46im))
    else if (x_46re <= 5.5d+81) then
        tmp = (3.0d0 * (x_46im * (x_46re * x_46re))) - (x_46im ** 3.0d0)
    else
        tmp = x_46re * (x_46re * (x_46im * 3.0d0))
    end if
    code = tmp
end function
public static double code(double x_46_re, double x_46_im) {
	return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re);
}
public static double code(double x_46_re, double x_46_im) {
	double tmp;
	if (x_46_re <= -5e+151) {
		tmp = 3.0 * (x_46_re * (x_46_re * x_46_im));
	} else if (x_46_re <= 5.5e+81) {
		tmp = (3.0 * (x_46_im * (x_46_re * x_46_re))) - Math.pow(x_46_im, 3.0);
	} else {
		tmp = x_46_re * (x_46_re * (x_46_im * 3.0));
	}
	return tmp;
}
def code(x_46_re, x_46_im):
	return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re)
def code(x_46_re, x_46_im):
	tmp = 0
	if x_46_re <= -5e+151:
		tmp = 3.0 * (x_46_re * (x_46_re * x_46_im))
	elif x_46_re <= 5.5e+81:
		tmp = (3.0 * (x_46_im * (x_46_re * x_46_re))) - math.pow(x_46_im, 3.0)
	else:
		tmp = x_46_re * (x_46_re * (x_46_im * 3.0))
	return tmp
function code(x_46_re, x_46_im)
	return Float64(Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im * x_46_im)) * x_46_im) + Float64(Float64(Float64(x_46_re * x_46_im) + Float64(x_46_im * x_46_re)) * x_46_re))
end
function code(x_46_re, x_46_im)
	tmp = 0.0
	if (x_46_re <= -5e+151)
		tmp = Float64(3.0 * Float64(x_46_re * Float64(x_46_re * x_46_im)));
	elseif (x_46_re <= 5.5e+81)
		tmp = Float64(Float64(3.0 * Float64(x_46_im * Float64(x_46_re * x_46_re))) - (x_46_im ^ 3.0));
	else
		tmp = Float64(x_46_re * Float64(x_46_re * Float64(x_46_im * 3.0)));
	end
	return tmp
end
function tmp = code(x_46_re, x_46_im)
	tmp = (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re);
end
function tmp_2 = code(x_46_re, x_46_im)
	tmp = 0.0;
	if (x_46_re <= -5e+151)
		tmp = 3.0 * (x_46_re * (x_46_re * x_46_im));
	elseif (x_46_re <= 5.5e+81)
		tmp = (3.0 * (x_46_im * (x_46_re * x_46_re))) - (x_46_im ^ 3.0);
	else
		tmp = x_46_re * (x_46_re * (x_46_im * 3.0));
	end
	tmp_2 = tmp;
end
code[x$46$re_, x$46$im_] := N[(N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$im), $MachinePrecision] + N[(x$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]
code[x$46$re_, x$46$im_] := If[LessEqual[x$46$re, -5e+151], N[(3.0 * N[(x$46$re * N[(x$46$re * x$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[x$46$re, 5.5e+81], N[(N[(3.0 * N[(x$46$im * N[(x$46$re * x$46$re), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[Power[x$46$im, 3.0], $MachinePrecision]), $MachinePrecision], N[(x$46$re * N[(x$46$re * N[(x$46$im * 3.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re
\begin{array}{l}
\mathbf{if}\;x.re \leq -5 \cdot 10^{+151}:\\
\;\;\;\;3 \cdot \left(x.re \cdot \left(x.re \cdot x.im\right)\right)\\

\mathbf{elif}\;x.re \leq 5.5 \cdot 10^{+81}:\\
\;\;\;\;3 \cdot \left(x.im \cdot \left(x.re \cdot x.re\right)\right) - {x.im}^{3}\\

\mathbf{else}:\\
\;\;\;\;x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right)\\


\end{array}

Error

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original7.3
Target0.2
Herbie0.3
\[\left(x.re \cdot x.im\right) \cdot \left(2 \cdot x.re\right) + \left(x.im \cdot \left(x.re - x.im\right)\right) \cdot \left(x.re + x.im\right) \]

Derivation

  1. Split input into 3 regimes
  2. if x.re < -5.0000000000000002e151

    1. Initial program 60.9

      \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    2. Simplified61.3

      \[\leadsto \color{blue}{x.im \cdot \mathsf{fma}\left(3, x.re \cdot x.re, -x.im \cdot x.im\right)} \]
      Proof
      (*.f64 x.im (fma.f64 3 (*.f64 x.re x.re) (neg.f64 (*.f64 x.im x.im)))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.im (fma.f64 (Rewrite<= metadata-eval (+.f64 2 1)) (*.f64 x.re x.re) (neg.f64 (*.f64 x.im x.im)))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.im (Rewrite<= fma-neg_binary64 (-.f64 (*.f64 (+.f64 2 1) (*.f64 x.re x.re)) (*.f64 x.im x.im)))): 13 points increase in error, 0 points decrease in error
      (*.f64 x.im (-.f64 (Rewrite<= distribute-lft1-in_binary64 (+.f64 (*.f64 2 (*.f64 x.re x.re)) (*.f64 x.re x.re))) (*.f64 x.im x.im))): 0 points increase in error, 13 points decrease in error
      (*.f64 x.im (-.f64 (+.f64 (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 2 x.re) x.re)) (*.f64 x.re x.re)) (*.f64 x.im x.im))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.im (-.f64 (+.f64 (*.f64 (Rewrite<= count-2_binary64 (+.f64 x.re x.re)) x.re) (*.f64 x.re x.re)) (*.f64 x.im x.im))): 13 points increase in error, 0 points decrease in error
      (*.f64 x.im (Rewrite<= associate-+r-_binary64 (+.f64 (*.f64 (+.f64 x.re x.re) x.re) (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))))): 0 points increase in error, 13 points decrease in error
      (*.f64 x.im (Rewrite=> +-commutative_binary64 (+.f64 (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im)) (*.f64 (+.f64 x.re x.re) x.re)))): 0 points increase in error, 0 points decrease in error
      (Rewrite<= distribute-lft-out_binary64 (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (*.f64 x.im (*.f64 (+.f64 x.re x.re) x.re)))): 0 points increase in error, 0 points decrease in error
      (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 x.im (+.f64 x.re x.re)) x.re))): 0 points increase in error, 0 points decrease in error
      (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (*.f64 (Rewrite<= distribute-lft-out_binary64 (+.f64 (*.f64 x.im x.re) (*.f64 x.im x.re))) x.re)): 0 points increase in error, 0 points decrease in error
      (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (*.f64 (+.f64 (Rewrite<= *-commutative_binary64 (*.f64 x.re x.im)) (*.f64 x.im x.re)) x.re)): 0 points increase in error, 0 points decrease in error
      (+.f64 (Rewrite<= *-commutative_binary64 (*.f64 (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im)) x.im)) (*.f64 (+.f64 (*.f64 x.re x.im) (*.f64 x.im x.re)) x.re)): 5 points increase in error, 0 points decrease in error
    3. Taylor expanded in x.im around 0 60.9

      \[\leadsto \color{blue}{3 \cdot \left({x.re}^{2} \cdot x.im\right)} \]
    4. Simplified0.4

      \[\leadsto \color{blue}{3 \cdot \left(x.re \cdot \left(x.re \cdot x.im\right)\right)} \]
      Proof
      (*.f64 3 (*.f64 x.re (*.f64 x.re x.im))): 0 points increase in error, 0 points decrease in error
      (*.f64 3 (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 x.re x.re) x.im))): 0 points increase in error, 3 points decrease in error
      (*.f64 3 (*.f64 (Rewrite<= unpow2_binary64 (pow.f64 x.re 2)) x.im)): 3 points increase in error, 0 points decrease in error

    if -5.0000000000000002e151 < x.re < 5.5000000000000003e81

    1. Initial program 0.2

      \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    2. Simplified0.1

      \[\leadsto \color{blue}{3 \cdot \left(\left(x.re \cdot x.re\right) \cdot x.im\right) - {x.im}^{3}} \]
      Proof
      (*.f64 x.im (fma.f64 3 (*.f64 x.re x.re) (neg.f64 (*.f64 x.im x.im)))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.im (fma.f64 (Rewrite<= metadata-eval (+.f64 2 1)) (*.f64 x.re x.re) (neg.f64 (*.f64 x.im x.im)))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.im (Rewrite<= fma-neg_binary64 (-.f64 (*.f64 (+.f64 2 1) (*.f64 x.re x.re)) (*.f64 x.im x.im)))): 13 points increase in error, 0 points decrease in error
      (*.f64 x.im (-.f64 (Rewrite<= distribute-lft1-in_binary64 (+.f64 (*.f64 2 (*.f64 x.re x.re)) (*.f64 x.re x.re))) (*.f64 x.im x.im))): 0 points increase in error, 13 points decrease in error
      (*.f64 x.im (-.f64 (+.f64 (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 2 x.re) x.re)) (*.f64 x.re x.re)) (*.f64 x.im x.im))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.im (-.f64 (+.f64 (*.f64 (Rewrite<= count-2_binary64 (+.f64 x.re x.re)) x.re) (*.f64 x.re x.re)) (*.f64 x.im x.im))): 13 points increase in error, 0 points decrease in error
      (*.f64 x.im (Rewrite<= associate-+r-_binary64 (+.f64 (*.f64 (+.f64 x.re x.re) x.re) (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))))): 0 points increase in error, 13 points decrease in error
      (*.f64 x.im (Rewrite=> +-commutative_binary64 (+.f64 (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im)) (*.f64 (+.f64 x.re x.re) x.re)))): 0 points increase in error, 0 points decrease in error
      (Rewrite<= distribute-lft-out_binary64 (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (*.f64 x.im (*.f64 (+.f64 x.re x.re) x.re)))): 0 points increase in error, 0 points decrease in error
      (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 x.im (+.f64 x.re x.re)) x.re))): 0 points increase in error, 0 points decrease in error
      (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (*.f64 (Rewrite<= distribute-lft-out_binary64 (+.f64 (*.f64 x.im x.re) (*.f64 x.im x.re))) x.re)): 0 points increase in error, 0 points decrease in error
      (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (*.f64 (+.f64 (Rewrite<= *-commutative_binary64 (*.f64 x.re x.im)) (*.f64 x.im x.re)) x.re)): 0 points increase in error, 0 points decrease in error
      (+.f64 (Rewrite<= *-commutative_binary64 (*.f64 (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im)) x.im)) (*.f64 (+.f64 (*.f64 x.re x.im) (*.f64 x.im x.re)) x.re)): 5 points increase in error, 0 points decrease in error

    if 5.5000000000000003e81 < x.re

    1. Initial program 29.5

      \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    2. Simplified29.5

      \[\leadsto \color{blue}{\mathsf{fma}\left(x.re, x.re \cdot \left(x.im + x.im\right), x.im \cdot \mathsf{fma}\left(x.re, x.re, -x.im \cdot x.im\right)\right)} \]
      Proof
      (*.f64 x.im (fma.f64 3 (*.f64 x.re x.re) (neg.f64 (*.f64 x.im x.im)))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.im (fma.f64 (Rewrite<= metadata-eval (+.f64 2 1)) (*.f64 x.re x.re) (neg.f64 (*.f64 x.im x.im)))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.im (Rewrite<= fma-neg_binary64 (-.f64 (*.f64 (+.f64 2 1) (*.f64 x.re x.re)) (*.f64 x.im x.im)))): 13 points increase in error, 0 points decrease in error
      (*.f64 x.im (-.f64 (Rewrite<= distribute-lft1-in_binary64 (+.f64 (*.f64 2 (*.f64 x.re x.re)) (*.f64 x.re x.re))) (*.f64 x.im x.im))): 0 points increase in error, 13 points decrease in error
      (*.f64 x.im (-.f64 (+.f64 (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 2 x.re) x.re)) (*.f64 x.re x.re)) (*.f64 x.im x.im))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.im (-.f64 (+.f64 (*.f64 (Rewrite<= count-2_binary64 (+.f64 x.re x.re)) x.re) (*.f64 x.re x.re)) (*.f64 x.im x.im))): 13 points increase in error, 0 points decrease in error
      (*.f64 x.im (Rewrite<= associate-+r-_binary64 (+.f64 (*.f64 (+.f64 x.re x.re) x.re) (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))))): 0 points increase in error, 13 points decrease in error
      (*.f64 x.im (Rewrite=> +-commutative_binary64 (+.f64 (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im)) (*.f64 (+.f64 x.re x.re) x.re)))): 0 points increase in error, 0 points decrease in error
      (Rewrite<= distribute-lft-out_binary64 (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (*.f64 x.im (*.f64 (+.f64 x.re x.re) x.re)))): 0 points increase in error, 0 points decrease in error
      (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 x.im (+.f64 x.re x.re)) x.re))): 0 points increase in error, 0 points decrease in error
      (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (*.f64 (Rewrite<= distribute-lft-out_binary64 (+.f64 (*.f64 x.im x.re) (*.f64 x.im x.re))) x.re)): 0 points increase in error, 0 points decrease in error
      (+.f64 (*.f64 x.im (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im))) (*.f64 (+.f64 (Rewrite<= *-commutative_binary64 (*.f64 x.re x.im)) (*.f64 x.im x.re)) x.re)): 0 points increase in error, 0 points decrease in error
      (+.f64 (Rewrite<= *-commutative_binary64 (*.f64 (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im)) x.im)) (*.f64 (+.f64 (*.f64 x.re x.im) (*.f64 x.im x.re)) x.re)): 5 points increase in error, 0 points decrease in error
    3. Taylor expanded in x.re around inf 30.1

      \[\leadsto \color{blue}{\left(2 \cdot x.im + x.im\right) \cdot {x.re}^{2}} \]
    4. Simplified1.0

      \[\leadsto \color{blue}{x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right)} \]
      Proof
      (*.f64 x.re (*.f64 x.re (*.f64 x.im 3))): 0 points increase in error, 0 points decrease in error
      (*.f64 x.re (*.f64 x.re (Rewrite<= *-commutative_binary64 (*.f64 3 x.im)))): 0 points increase in error, 7 points decrease in error
      (*.f64 x.re (*.f64 x.re (*.f64 (Rewrite<= metadata-eval (+.f64 2 1)) x.im))): 7 points increase in error, 0 points decrease in error
      (*.f64 x.re (*.f64 x.re (Rewrite<= distribute-lft1-in_binary64 (+.f64 (*.f64 2 x.im) x.im)))): 0 points increase in error, 7 points decrease in error
      (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 x.re x.re) (+.f64 (*.f64 2 x.im) x.im))): 0 points increase in error, 7 points decrease in error
      (*.f64 (Rewrite<= unpow2_binary64 (pow.f64 x.re 2)) (+.f64 (*.f64 2 x.im) x.im)): 3 points increase in error, 0 points decrease in error
      (Rewrite<= *-commutative_binary64 (*.f64 (+.f64 (*.f64 2 x.im) x.im) (pow.f64 x.re 2))): 0 points increase in error, 3 points decrease in error
  3. Recombined 3 regimes into one program.
  4. Final simplification0.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;x.re \leq -5 \cdot 10^{+151}:\\ \;\;\;\;3 \cdot \left(x.re \cdot \left(x.re \cdot x.im\right)\right)\\ \mathbf{elif}\;x.re \leq 5.5 \cdot 10^{+81}:\\ \;\;\;\;3 \cdot \left(x.im \cdot \left(x.re \cdot x.re\right)\right) - {x.im}^{3}\\ \mathbf{else}:\\ \;\;\;\;x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right)\\ \end{array} \]

Alternatives

Alternative 1
Error0.2
Cost7040
\[x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right) - {x.im}^{3} \]
Alternative 2
Error0.2
Cost7040
\[x.re \cdot \left(3 \cdot \left(x.re \cdot x.im\right)\right) - {x.im}^{3} \]
Alternative 3
Error0.3
Cost1480
\[\begin{array}{l} \mathbf{if}\;x.re \leq -2 \cdot 10^{+152}:\\ \;\;\;\;3 \cdot \left(x.re \cdot \left(x.re \cdot x.im\right)\right)\\ \mathbf{elif}\;x.re \leq 5.3 \cdot 10^{+81}:\\ \;\;\;\;x.im \cdot \left(x.re \cdot x.re - x.im \cdot x.im\right) + x.re \cdot \left(x.re \cdot x.im + x.re \cdot x.im\right)\\ \mathbf{else}:\\ \;\;\;\;x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right)\\ \end{array} \]
Alternative 4
Error0.3
Cost968
\[\begin{array}{l} \mathbf{if}\;x.re \leq -7.5 \cdot 10^{+150}:\\ \;\;\;\;3 \cdot \left(x.re \cdot \left(x.re \cdot x.im\right)\right)\\ \mathbf{elif}\;x.re \leq 5.5 \cdot 10^{+81}:\\ \;\;\;\;x.im \cdot \left(3 \cdot \left(x.re \cdot x.re\right) - x.im \cdot x.im\right)\\ \mathbf{else}:\\ \;\;\;\;x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right)\\ \end{array} \]
Alternative 5
Error12.0
Cost713
\[\begin{array}{l} \mathbf{if}\;x.re \leq -1.35 \cdot 10^{-52} \lor \neg \left(x.re \leq 5 \cdot 10^{-58}\right):\\ \;\;\;\;3 \cdot \left(x.im \cdot \left(x.re \cdot x.re\right)\right)\\ \mathbf{else}:\\ \;\;\;\;x.im \cdot \left(x.im \cdot \left(-x.im\right)\right)\\ \end{array} \]
Alternative 6
Error5.0
Cost713
\[\begin{array}{l} \mathbf{if}\;x.re \leq -4.8 \cdot 10^{-52} \lor \neg \left(x.re \leq 10^{-57}\right):\\ \;\;\;\;3 \cdot \left(x.re \cdot \left(x.re \cdot x.im\right)\right)\\ \mathbf{else}:\\ \;\;\;\;x.im \cdot \left(x.im \cdot \left(-x.im\right)\right)\\ \end{array} \]
Alternative 7
Error5.0
Cost713
\[\begin{array}{l} \mathbf{if}\;x.re \leq -1.4 \cdot 10^{-51} \lor \neg \left(x.re \leq 1.3 \cdot 10^{-56}\right):\\ \;\;\;\;x.re \cdot \left(3 \cdot \left(x.re \cdot x.im\right)\right)\\ \mathbf{else}:\\ \;\;\;\;x.im \cdot \left(x.im \cdot \left(-x.im\right)\right)\\ \end{array} \]
Alternative 8
Error5.0
Cost712
\[\begin{array}{l} \mathbf{if}\;x.re \leq -8 \cdot 10^{-52}:\\ \;\;\;\;x.re \cdot \left(3 \cdot \left(x.re \cdot x.im\right)\right)\\ \mathbf{elif}\;x.re \leq 3.7 \cdot 10^{-57}:\\ \;\;\;\;x.im \cdot \left(x.im \cdot \left(-x.im\right)\right)\\ \mathbf{else}:\\ \;\;\;\;x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right)\\ \end{array} \]
Alternative 9
Error5.0
Cost712
\[\begin{array}{l} \mathbf{if}\;x.re \leq -4.5 \cdot 10^{-53}:\\ \;\;\;\;x.re \cdot \left(x.im \cdot \left(x.re \cdot 3\right)\right)\\ \mathbf{elif}\;x.re \leq 4.7 \cdot 10^{-58}:\\ \;\;\;\;x.im \cdot \left(x.im \cdot \left(-x.im\right)\right)\\ \mathbf{else}:\\ \;\;\;\;x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right)\\ \end{array} \]
Alternative 10
Error28.9
Cost384
\[x.im \cdot \left(x.im \cdot \left(-x.im\right)\right) \]

Error

Reproduce

herbie shell --seed 2022343 
(FPCore (x.re x.im)
  :name "math.cube on complex, imaginary part"
  :precision binary64

  :herbie-target
  (+ (* (* x.re x.im) (* 2.0 x.re)) (* (* x.im (- x.re x.im)) (+ x.re x.im)))

  (+ (* (- (* x.re x.re) (* x.im x.im)) x.im) (* (+ (* x.re x.im) (* x.im x.re)) x.re)))