math.cube on complex, imaginary part

Percentage Accurate: 82.6% → 99.8%
Time: 7.0s
Alternatives: 8
Speedup: 0.9×

Specification

?
\[\begin{array}{l} \\ \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 \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)))
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);
}
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
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);
}
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)
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 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
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]
\begin{array}{l}

\\
\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
\end{array}

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 8 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 82.6% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \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 \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)))
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);
}
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
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);
}
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)
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 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
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]
\begin{array}{l}

\\
\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
\end{array}

Alternative 1: 99.8% accurate, 0.4× speedup?

\[\begin{array}{l} x.re_m = \left|x.re\right| \\ \begin{array}{l} t_0 := \left(x.re\_m - x.im\right) \cdot x.im\\ \mathbf{if}\;\left(x.re\_m \cdot x.re\_m - x.im \cdot x.im\right) \cdot x.im + \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m \leq \infty:\\ \;\;\;\;\mathsf{fma}\left(\sqrt{x.re\_m}, \sqrt{x.re\_m}, x.im\right) \cdot t\_0 + \left(\left(2 \cdot x.re\_m\right) \cdot x.im\right) \cdot x.re\_m\\ \mathbf{else}:\\ \;\;\;\;\frac{t\_0 \cdot \left(\left(x.im + x.re\_m\right) \cdot \left(x.im - x.re\_m\right)\right)}{x.im - x.re\_m}\\ \end{array} \end{array} \]
x.re_m = (fabs.f64 x.re)
(FPCore (x.re_m x.im)
 :precision binary64
 (let* ((t_0 (* (- x.re_m x.im) x.im)))
   (if (<=
        (+
         (* (- (* x.re_m x.re_m) (* x.im x.im)) x.im)
         (* (+ (* x.re_m x.im) (* x.im x.re_m)) x.re_m))
        INFINITY)
     (+
      (* (fma (sqrt x.re_m) (sqrt x.re_m) x.im) t_0)
      (* (* (* 2.0 x.re_m) x.im) x.re_m))
     (/ (* t_0 (* (+ x.im x.re_m) (- x.im x.re_m))) (- x.im x.re_m)))))
x.re_m = fabs(x_46_re);
double code(double x_46_re_m, double x_46_im) {
	double t_0 = (x_46_re_m - x_46_im) * x_46_im;
	double tmp;
	if (((((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m)) <= ((double) INFINITY)) {
		tmp = (fma(sqrt(x_46_re_m), sqrt(x_46_re_m), x_46_im) * t_0) + (((2.0 * x_46_re_m) * x_46_im) * x_46_re_m);
	} else {
		tmp = (t_0 * ((x_46_im + x_46_re_m) * (x_46_im - x_46_re_m))) / (x_46_im - x_46_re_m);
	}
	return tmp;
}
x.re_m = abs(x_46_re)
function code(x_46_re_m, x_46_im)
	t_0 = Float64(Float64(x_46_re_m - x_46_im) * x_46_im)
	tmp = 0.0
	if (Float64(Float64(Float64(Float64(x_46_re_m * x_46_re_m) - Float64(x_46_im * x_46_im)) * x_46_im) + Float64(Float64(Float64(x_46_re_m * x_46_im) + Float64(x_46_im * x_46_re_m)) * x_46_re_m)) <= Inf)
		tmp = Float64(Float64(fma(sqrt(x_46_re_m), sqrt(x_46_re_m), x_46_im) * t_0) + Float64(Float64(Float64(2.0 * x_46_re_m) * x_46_im) * x_46_re_m));
	else
		tmp = Float64(Float64(t_0 * Float64(Float64(x_46_im + x_46_re_m) * Float64(x_46_im - x_46_re_m))) / Float64(x_46_im - x_46_re_m));
	end
	return tmp
end
x.re_m = N[Abs[x$46$re], $MachinePrecision]
code[x$46$re$95$m_, x$46$im_] := Block[{t$95$0 = N[(N[(x$46$re$95$m - x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]}, If[LessEqual[N[(N[(N[(N[(x$46$re$95$m * x$46$re$95$m), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision] + N[(N[(N[(x$46$re$95$m * x$46$im), $MachinePrecision] + N[(x$46$im * x$46$re$95$m), $MachinePrecision]), $MachinePrecision] * x$46$re$95$m), $MachinePrecision]), $MachinePrecision], Infinity], N[(N[(N[(N[Sqrt[x$46$re$95$m], $MachinePrecision] * N[Sqrt[x$46$re$95$m], $MachinePrecision] + x$46$im), $MachinePrecision] * t$95$0), $MachinePrecision] + N[(N[(N[(2.0 * x$46$re$95$m), $MachinePrecision] * x$46$im), $MachinePrecision] * x$46$re$95$m), $MachinePrecision]), $MachinePrecision], N[(N[(t$95$0 * N[(N[(x$46$im + x$46$re$95$m), $MachinePrecision] * N[(x$46$im - x$46$re$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(x$46$im - x$46$re$95$m), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
x.re_m = \left|x.re\right|

\\
\begin{array}{l}
t_0 := \left(x.re\_m - x.im\right) \cdot x.im\\
\mathbf{if}\;\left(x.re\_m \cdot x.re\_m - x.im \cdot x.im\right) \cdot x.im + \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m \leq \infty:\\
\;\;\;\;\mathsf{fma}\left(\sqrt{x.re\_m}, \sqrt{x.re\_m}, x.im\right) \cdot t\_0 + \left(\left(2 \cdot x.re\_m\right) \cdot x.im\right) \cdot x.re\_m\\

\mathbf{else}:\\
\;\;\;\;\frac{t\_0 \cdot \left(\left(x.im + x.re\_m\right) \cdot \left(x.im - x.re\_m\right)\right)}{x.im - x.re\_m}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (+.f64 (*.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)) < +inf.0

    1. Initial program 94.3%

      \[\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. Add Preprocessing
    3. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \color{blue}{\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. lift--.f64N/A

        \[\leadsto \color{blue}{\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 \]
      3. lift-*.f64N/A

        \[\leadsto \left(\color{blue}{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 \]
      4. lift-*.f64N/A

        \[\leadsto \left(x.re \cdot x.re - \color{blue}{x.im \cdot x.im}\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      5. difference-of-squaresN/A

        \[\leadsto \color{blue}{\left(\left(x.re + x.im\right) \cdot \left(x.re - x.im\right)\right)} \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      6. associate-*l*N/A

        \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      7. lower-*.f64N/A

        \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      8. +-commutativeN/A

        \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      9. lower-+.f64N/A

        \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      10. lower-*.f64N/A

        \[\leadsto \left(x.im + x.re\right) \cdot \color{blue}{\left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      11. lower--.f6499.7

        \[\leadsto \left(x.im + x.re\right) \cdot \left(\color{blue}{\left(x.re - x.im\right)} \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    4. Applied rewrites99.7%

      \[\leadsto \color{blue}{\left(x.im + x.re\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    5. Step-by-step derivation
      1. lift-+.f64N/A

        \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      2. +-commutativeN/A

        \[\leadsto \color{blue}{\left(x.re + x.im\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      3. unpow1N/A

        \[\leadsto \left(\color{blue}{{x.re}^{1}} + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      4. metadata-evalN/A

        \[\leadsto \left({x.re}^{\color{blue}{\left(\frac{2}{2}\right)}} + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      5. sqrt-pow1N/A

        \[\leadsto \left(\color{blue}{\sqrt{{x.re}^{2}}} + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      6. pow2N/A

        \[\leadsto \left(\sqrt{\color{blue}{x.re \cdot x.re}} + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      7. rem-sqrt-square-revN/A

        \[\leadsto \left(\color{blue}{\left|x.re\right|} + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      8. unpow1N/A

        \[\leadsto \left(\left|x.re\right| + \color{blue}{{x.im}^{1}}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      9. metadata-evalN/A

        \[\leadsto \left(\left|x.re\right| + {x.im}^{\color{blue}{\left(\frac{2}{2}\right)}}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      10. sqrt-pow1N/A

        \[\leadsto \left(\left|x.re\right| + \color{blue}{\sqrt{{x.im}^{2}}}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      11. pow2N/A

        \[\leadsto \left(\left|x.re\right| + \sqrt{\color{blue}{x.im \cdot x.im}}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      12. rem-sqrt-square-revN/A

        \[\leadsto \left(\left|x.re\right| + \color{blue}{\left|x.im\right|}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      13. rem-sqrt-square-revN/A

        \[\leadsto \left(\color{blue}{\sqrt{x.re \cdot x.re}} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      14. pow2N/A

        \[\leadsto \left(\sqrt{\color{blue}{{x.re}^{2}}} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      15. sqrt-pow1N/A

        \[\leadsto \left(\color{blue}{{x.re}^{\left(\frac{2}{2}\right)}} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      16. metadata-evalN/A

        \[\leadsto \left({x.re}^{\color{blue}{1}} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      17. unpow1N/A

        \[\leadsto \left(\color{blue}{x.re} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      18. unpow1N/A

        \[\leadsto \left(\color{blue}{{x.re}^{1}} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      19. metadata-evalN/A

        \[\leadsto \left({x.re}^{\color{blue}{\left(\frac{2}{2}\right)}} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      20. sqrt-pow1N/A

        \[\leadsto \left(\color{blue}{\sqrt{{x.re}^{2}}} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      21. pow2N/A

        \[\leadsto \left(\sqrt{\color{blue}{x.re \cdot x.re}} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      22. sqrt-prodN/A

        \[\leadsto \left(\color{blue}{\sqrt{x.re} \cdot \sqrt{x.re}} + \left|x.im\right|\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      23. rem-sqrt-square-revN/A

        \[\leadsto \left(\sqrt{x.re} \cdot \sqrt{x.re} + \color{blue}{\sqrt{x.im \cdot x.im}}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      24. pow2N/A

        \[\leadsto \left(\sqrt{x.re} \cdot \sqrt{x.re} + \sqrt{\color{blue}{{x.im}^{2}}}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      25. sqrt-pow1N/A

        \[\leadsto \left(\sqrt{x.re} \cdot \sqrt{x.re} + \color{blue}{{x.im}^{\left(\frac{2}{2}\right)}}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      26. metadata-evalN/A

        \[\leadsto \left(\sqrt{x.re} \cdot \sqrt{x.re} + {x.im}^{\color{blue}{1}}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      27. unpow1N/A

        \[\leadsto \left(\sqrt{x.re} \cdot \sqrt{x.re} + \color{blue}{x.im}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      28. lower-fma.f64N/A

        \[\leadsto \color{blue}{\mathsf{fma}\left(\sqrt{x.re}, \sqrt{x.re}, x.im\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      29. lower-sqrt.f64N/A

        \[\leadsto \mathsf{fma}\left(\color{blue}{\sqrt{x.re}}, \sqrt{x.re}, x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      30. lower-sqrt.f6449.2

        \[\leadsto \mathsf{fma}\left(\sqrt{x.re}, \color{blue}{\sqrt{x.re}}, x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    6. Applied rewrites49.2%

      \[\leadsto \color{blue}{\mathsf{fma}\left(\sqrt{x.re}, \sqrt{x.re}, x.im\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    7. Taylor expanded in x.re around 0

      \[\leadsto \mathsf{fma}\left(\sqrt{x.re}, \sqrt{x.re}, x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \color{blue}{\left(2 \cdot \left(x.im \cdot x.re\right)\right)} \cdot x.re \]
    8. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \mathsf{fma}\left(\sqrt{x.re}, \sqrt{x.re}, x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(2 \cdot \color{blue}{\left(x.re \cdot x.im\right)}\right) \cdot x.re \]
      2. associate-*r*N/A

        \[\leadsto \mathsf{fma}\left(\sqrt{x.re}, \sqrt{x.re}, x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \color{blue}{\left(\left(2 \cdot x.re\right) \cdot x.im\right)} \cdot x.re \]
      3. lower-*.f64N/A

        \[\leadsto \mathsf{fma}\left(\sqrt{x.re}, \sqrt{x.re}, x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \color{blue}{\left(\left(2 \cdot x.re\right) \cdot x.im\right)} \cdot x.re \]
      4. lower-*.f6449.2

        \[\leadsto \mathsf{fma}\left(\sqrt{x.re}, \sqrt{x.re}, x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(\color{blue}{\left(2 \cdot x.re\right)} \cdot x.im\right) \cdot x.re \]
    9. Applied rewrites49.2%

      \[\leadsto \mathsf{fma}\left(\sqrt{x.re}, \sqrt{x.re}, x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \color{blue}{\left(\left(2 \cdot x.re\right) \cdot x.im\right)} \cdot x.re \]

    if +inf.0 < (+.f64 (*.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))

    1. Initial program 0.0%

      \[\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. Add Preprocessing
    3. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \color{blue}{\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. lift--.f64N/A

        \[\leadsto \color{blue}{\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 \]
      3. lift-*.f64N/A

        \[\leadsto \left(\color{blue}{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 \]
      4. lift-*.f64N/A

        \[\leadsto \left(x.re \cdot x.re - \color{blue}{x.im \cdot x.im}\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      5. difference-of-squaresN/A

        \[\leadsto \color{blue}{\left(\left(x.re + x.im\right) \cdot \left(x.re - x.im\right)\right)} \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      6. associate-*l*N/A

        \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      7. lower-*.f64N/A

        \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      8. +-commutativeN/A

        \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      9. lower-+.f64N/A

        \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      10. lower-*.f64N/A

        \[\leadsto \left(x.im + x.re\right) \cdot \color{blue}{\left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      11. lower--.f6421.2

        \[\leadsto \left(x.im + x.re\right) \cdot \left(\color{blue}{\left(x.re - x.im\right)} \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    4. Applied rewrites21.2%

      \[\leadsto \color{blue}{\left(x.im + x.re\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    5. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \color{blue}{\left(x.im + x.re\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      2. *-commutativeN/A

        \[\leadsto \color{blue}{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im + x.re\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      3. lift-+.f64N/A

        \[\leadsto \left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \color{blue}{\left(x.im + x.re\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      4. flip-+N/A

        \[\leadsto \left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \color{blue}{\frac{x.im \cdot x.im - x.re \cdot x.re}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      5. associate-*r/N/A

        \[\leadsto \color{blue}{\frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im \cdot x.im - x.re \cdot x.re\right)}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      6. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im \cdot x.im - x.re \cdot x.re\right)}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      7. lower-*.f64N/A

        \[\leadsto \frac{\color{blue}{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im \cdot x.im - x.re \cdot x.re\right)}}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      8. difference-of-squaresN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \color{blue}{\left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      9. lift-+.f64N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\color{blue}{\left(x.im + x.re\right)} \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      10. lower-*.f64N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \color{blue}{\left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      11. lower--.f64N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \color{blue}{\left(x.im - x.re\right)}\right)}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
      12. lower--.f6421.2

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{\color{blue}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    6. Applied rewrites21.2%

      \[\leadsto \color{blue}{\frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    7. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + \color{blue}{\left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re} \]
      2. *-commutativeN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + \color{blue}{x.re \cdot \left(x.re \cdot x.im + x.im \cdot x.re\right)} \]
      3. lift-+.f64N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{\left(x.re \cdot x.im + x.im \cdot x.re\right)} \]
      4. +-commutativeN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{\left(x.im \cdot x.re + x.re \cdot x.im\right)} \]
      5. lift-*.f64N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re + \color{blue}{x.re \cdot x.im}\right) \]
      6. fp-cancel-sign-sub-invN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{\left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot x.im\right)} \]
      7. unpow1N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot \color{blue}{{x.im}^{1}}\right) \]
      8. metadata-evalN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot {x.im}^{\color{blue}{\left(\frac{2}{2}\right)}}\right) \]
      9. sqrt-pow1N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot \color{blue}{\sqrt{{x.im}^{2}}}\right) \]
      10. pow2N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot \sqrt{\color{blue}{x.im \cdot x.im}}\right) \]
      11. rem-sqrt-square-revN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot \color{blue}{\left|x.im\right|}\right) \]
      12. rem-square-sqrtN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{\left(\sqrt{\mathsf{neg}\left(x.re\right)} \cdot \sqrt{\mathsf{neg}\left(x.re\right)}\right)} \cdot \left|x.im\right|\right) \]
      13. sqrt-prodN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{\sqrt{\left(\mathsf{neg}\left(x.re\right)\right) \cdot \left(\mathsf{neg}\left(x.re\right)\right)}} \cdot \left|x.im\right|\right) \]
      14. sqr-neg-revN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \sqrt{\color{blue}{x.re \cdot x.re}} \cdot \left|x.im\right|\right) \]
      15. sqrt-unprodN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{\left(\sqrt{x.re} \cdot \sqrt{x.re}\right)} \cdot \left|x.im\right|\right) \]
      16. rem-square-sqrtN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{x.re} \cdot \left|x.im\right|\right) \]
      17. rem-sqrt-square-revN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot \color{blue}{\sqrt{x.im \cdot x.im}}\right) \]
      18. pow2N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot \sqrt{\color{blue}{{x.im}^{2}}}\right) \]
      19. sqrt-pow1N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot \color{blue}{{x.im}^{\left(\frac{2}{2}\right)}}\right) \]
      20. metadata-evalN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot {x.im}^{\color{blue}{1}}\right) \]
      21. unpow1N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot \color{blue}{x.im}\right) \]
      22. *-commutativeN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{x.im \cdot x.re}\right) \]
      23. lift-*.f64N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{x.im \cdot x.re}\right) \]
      24. +-inversesN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{0} \]
      25. +-inversesN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{\left(\left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right) - \left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right)\right)} \]
      26. lift-*.f64N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(\left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right) - \color{blue}{\left(x.im \cdot x.re\right)} \cdot \left(x.im \cdot x.re\right)\right) \]
      27. *-commutativeN/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(\left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right) - \color{blue}{\left(x.re \cdot x.im\right)} \cdot \left(x.im \cdot x.re\right)\right) \]
      28. lift-*.f64N/A

        \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(\left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right) - \color{blue}{\left(x.re \cdot x.im\right)} \cdot \left(x.im \cdot x.re\right)\right) \]
    8. Applied rewrites100.0%

      \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + \color{blue}{x.re \cdot 0} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification55.8%

    \[\leadsto \begin{array}{l} \mathbf{if}\;\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 \leq \infty:\\ \;\;\;\;\mathsf{fma}\left(\sqrt{x.re}, \sqrt{x.re}, x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(\left(2 \cdot x.re\right) \cdot x.im\right) \cdot x.re\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re}\\ \end{array} \]
  5. Add Preprocessing

Alternative 2: 59.9% accurate, 0.4× speedup?

\[\begin{array}{l} x.re_m = \left|x.re\right| \\ \begin{array}{l} t_0 := \left(x.re\_m \cdot x.re\_m - x.im \cdot x.im\right) \cdot x.im + \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m\\ \mathbf{if}\;t\_0 \leq -1 \cdot 10^{-304} \lor \neg \left(t\_0 \leq \infty\right):\\ \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\ \mathbf{else}:\\ \;\;\;\;\left(x.im \cdot x.re\_m\right) \cdot \left(3 \cdot x.re\_m\right)\\ \end{array} \end{array} \]
x.re_m = (fabs.f64 x.re)
(FPCore (x.re_m x.im)
 :precision binary64
 (let* ((t_0
         (+
          (* (- (* x.re_m x.re_m) (* x.im x.im)) x.im)
          (* (+ (* x.re_m x.im) (* x.im x.re_m)) x.re_m))))
   (if (or (<= t_0 -1e-304) (not (<= t_0 INFINITY)))
     (* (* (- x.im) x.im) x.im)
     (* (* x.im x.re_m) (* 3.0 x.re_m)))))
x.re_m = fabs(x_46_re);
double code(double x_46_re_m, double x_46_im) {
	double t_0 = (((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m);
	double tmp;
	if ((t_0 <= -1e-304) || !(t_0 <= ((double) INFINITY))) {
		tmp = (-x_46_im * x_46_im) * x_46_im;
	} else {
		tmp = (x_46_im * x_46_re_m) * (3.0 * x_46_re_m);
	}
	return tmp;
}
x.re_m = Math.abs(x_46_re);
public static double code(double x_46_re_m, double x_46_im) {
	double t_0 = (((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m);
	double tmp;
	if ((t_0 <= -1e-304) || !(t_0 <= Double.POSITIVE_INFINITY)) {
		tmp = (-x_46_im * x_46_im) * x_46_im;
	} else {
		tmp = (x_46_im * x_46_re_m) * (3.0 * x_46_re_m);
	}
	return tmp;
}
x.re_m = math.fabs(x_46_re)
def code(x_46_re_m, x_46_im):
	t_0 = (((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m)
	tmp = 0
	if (t_0 <= -1e-304) or not (t_0 <= math.inf):
		tmp = (-x_46_im * x_46_im) * x_46_im
	else:
		tmp = (x_46_im * x_46_re_m) * (3.0 * x_46_re_m)
	return tmp
x.re_m = abs(x_46_re)
function code(x_46_re_m, x_46_im)
	t_0 = Float64(Float64(Float64(Float64(x_46_re_m * x_46_re_m) - Float64(x_46_im * x_46_im)) * x_46_im) + Float64(Float64(Float64(x_46_re_m * x_46_im) + Float64(x_46_im * x_46_re_m)) * x_46_re_m))
	tmp = 0.0
	if ((t_0 <= -1e-304) || !(t_0 <= Inf))
		tmp = Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im);
	else
		tmp = Float64(Float64(x_46_im * x_46_re_m) * Float64(3.0 * x_46_re_m));
	end
	return tmp
end
x.re_m = abs(x_46_re);
function tmp_2 = code(x_46_re_m, x_46_im)
	t_0 = (((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m);
	tmp = 0.0;
	if ((t_0 <= -1e-304) || ~((t_0 <= Inf)))
		tmp = (-x_46_im * x_46_im) * x_46_im;
	else
		tmp = (x_46_im * x_46_re_m) * (3.0 * x_46_re_m);
	end
	tmp_2 = tmp;
end
x.re_m = N[Abs[x$46$re], $MachinePrecision]
code[x$46$re$95$m_, x$46$im_] := Block[{t$95$0 = N[(N[(N[(N[(x$46$re$95$m * x$46$re$95$m), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision] + N[(N[(N[(x$46$re$95$m * x$46$im), $MachinePrecision] + N[(x$46$im * x$46$re$95$m), $MachinePrecision]), $MachinePrecision] * x$46$re$95$m), $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[t$95$0, -1e-304], N[Not[LessEqual[t$95$0, Infinity]], $MachinePrecision]], N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision], N[(N[(x$46$im * x$46$re$95$m), $MachinePrecision] * N[(3.0 * x$46$re$95$m), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
x.re_m = \left|x.re\right|

\\
\begin{array}{l}
t_0 := \left(x.re\_m \cdot x.re\_m - x.im \cdot x.im\right) \cdot x.im + \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m\\
\mathbf{if}\;t\_0 \leq -1 \cdot 10^{-304} \lor \neg \left(t\_0 \leq \infty\right):\\
\;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\

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


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (+.f64 (*.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)) < -9.99999999999999971e-305 or +inf.0 < (+.f64 (*.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))

    1. Initial program 68.8%

      \[\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. Add Preprocessing
    3. Taylor expanded in x.re around 0

      \[\leadsto \color{blue}{-1 \cdot {x.im}^{3}} \]
    4. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \color{blue}{\mathsf{neg}\left({x.im}^{3}\right)} \]
      2. cube-neg-revN/A

        \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
      3. lower-pow.f64N/A

        \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
      4. lower-neg.f6454.0

        \[\leadsto {\color{blue}{\left(-x.im\right)}}^{3} \]
    5. Applied rewrites54.0%

      \[\leadsto \color{blue}{{\left(-x.im\right)}^{3}} \]
    6. Step-by-step derivation
      1. Applied rewrites53.9%

        \[\leadsto \left(\left(-x.im\right) \cdot x.im\right) \cdot \color{blue}{x.im} \]

      if -9.99999999999999971e-305 < (+.f64 (*.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)) < +inf.0

      1. Initial program 96.7%

        \[\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. Add Preprocessing
      3. Taylor expanded in x.re around inf

        \[\leadsto \color{blue}{{x.re}^{2} \cdot \left(x.im + 2 \cdot x.im\right)} \]
      4. Step-by-step derivation
        1. *-commutativeN/A

          \[\leadsto \color{blue}{\left(x.im + 2 \cdot x.im\right) \cdot {x.re}^{2}} \]
        2. unpow2N/A

          \[\leadsto \left(x.im + 2 \cdot x.im\right) \cdot \color{blue}{\left(x.re \cdot x.re\right)} \]
        3. associate-*r*N/A

          \[\leadsto \color{blue}{\left(\left(x.im + 2 \cdot x.im\right) \cdot x.re\right) \cdot x.re} \]
        4. lower-*.f64N/A

          \[\leadsto \color{blue}{\left(\left(x.im + 2 \cdot x.im\right) \cdot x.re\right) \cdot x.re} \]
        5. *-commutativeN/A

          \[\leadsto \color{blue}{\left(x.re \cdot \left(x.im + 2 \cdot x.im\right)\right)} \cdot x.re \]
        6. distribute-rgt1-inN/A

          \[\leadsto \left(x.re \cdot \color{blue}{\left(\left(2 + 1\right) \cdot x.im\right)}\right) \cdot x.re \]
        7. metadata-evalN/A

          \[\leadsto \left(x.re \cdot \left(\color{blue}{3} \cdot x.im\right)\right) \cdot x.re \]
        8. associate-*r*N/A

          \[\leadsto \color{blue}{\left(\left(x.re \cdot 3\right) \cdot x.im\right)} \cdot x.re \]
        9. *-commutativeN/A

          \[\leadsto \left(\color{blue}{\left(3 \cdot x.re\right)} \cdot x.im\right) \cdot x.re \]
        10. lower-*.f64N/A

          \[\leadsto \color{blue}{\left(\left(3 \cdot x.re\right) \cdot x.im\right)} \cdot x.re \]
        11. lower-*.f6466.9

          \[\leadsto \left(\color{blue}{\left(3 \cdot x.re\right)} \cdot x.im\right) \cdot x.re \]
      5. Applied rewrites66.9%

        \[\leadsto \color{blue}{\left(\left(3 \cdot x.re\right) \cdot x.im\right) \cdot x.re} \]
      6. Step-by-step derivation
        1. Applied rewrites66.9%

          \[\leadsto \left(x.im \cdot x.re\right) \cdot \color{blue}{\left(3 \cdot x.re\right)} \]
      7. Recombined 2 regimes into one program.
      8. Final simplification60.1%

        \[\leadsto \begin{array}{l} \mathbf{if}\;\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 \leq -1 \cdot 10^{-304} \lor \neg \left(\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 \leq \infty\right):\\ \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\ \mathbf{else}:\\ \;\;\;\;\left(x.im \cdot x.re\right) \cdot \left(3 \cdot x.re\right)\\ \end{array} \]
      9. Add Preprocessing

      Alternative 3: 59.9% accurate, 0.4× speedup?

      \[\begin{array}{l} x.re_m = \left|x.re\right| \\ \begin{array}{l} t_0 := \left(x.re\_m \cdot x.re\_m - x.im \cdot x.im\right) \cdot x.im + \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m\\ \mathbf{if}\;t\_0 \leq -1 \cdot 10^{-304} \lor \neg \left(t\_0 \leq \infty\right):\\ \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\ \mathbf{else}:\\ \;\;\;\;3 \cdot \left(\left(x.im \cdot x.re\_m\right) \cdot x.re\_m\right)\\ \end{array} \end{array} \]
      x.re_m = (fabs.f64 x.re)
      (FPCore (x.re_m x.im)
       :precision binary64
       (let* ((t_0
               (+
                (* (- (* x.re_m x.re_m) (* x.im x.im)) x.im)
                (* (+ (* x.re_m x.im) (* x.im x.re_m)) x.re_m))))
         (if (or (<= t_0 -1e-304) (not (<= t_0 INFINITY)))
           (* (* (- x.im) x.im) x.im)
           (* 3.0 (* (* x.im x.re_m) x.re_m)))))
      x.re_m = fabs(x_46_re);
      double code(double x_46_re_m, double x_46_im) {
      	double t_0 = (((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m);
      	double tmp;
      	if ((t_0 <= -1e-304) || !(t_0 <= ((double) INFINITY))) {
      		tmp = (-x_46_im * x_46_im) * x_46_im;
      	} else {
      		tmp = 3.0 * ((x_46_im * x_46_re_m) * x_46_re_m);
      	}
      	return tmp;
      }
      
      x.re_m = Math.abs(x_46_re);
      public static double code(double x_46_re_m, double x_46_im) {
      	double t_0 = (((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m);
      	double tmp;
      	if ((t_0 <= -1e-304) || !(t_0 <= Double.POSITIVE_INFINITY)) {
      		tmp = (-x_46_im * x_46_im) * x_46_im;
      	} else {
      		tmp = 3.0 * ((x_46_im * x_46_re_m) * x_46_re_m);
      	}
      	return tmp;
      }
      
      x.re_m = math.fabs(x_46_re)
      def code(x_46_re_m, x_46_im):
      	t_0 = (((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m)
      	tmp = 0
      	if (t_0 <= -1e-304) or not (t_0 <= math.inf):
      		tmp = (-x_46_im * x_46_im) * x_46_im
      	else:
      		tmp = 3.0 * ((x_46_im * x_46_re_m) * x_46_re_m)
      	return tmp
      
      x.re_m = abs(x_46_re)
      function code(x_46_re_m, x_46_im)
      	t_0 = Float64(Float64(Float64(Float64(x_46_re_m * x_46_re_m) - Float64(x_46_im * x_46_im)) * x_46_im) + Float64(Float64(Float64(x_46_re_m * x_46_im) + Float64(x_46_im * x_46_re_m)) * x_46_re_m))
      	tmp = 0.0
      	if ((t_0 <= -1e-304) || !(t_0 <= Inf))
      		tmp = Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im);
      	else
      		tmp = Float64(3.0 * Float64(Float64(x_46_im * x_46_re_m) * x_46_re_m));
      	end
      	return tmp
      end
      
      x.re_m = abs(x_46_re);
      function tmp_2 = code(x_46_re_m, x_46_im)
      	t_0 = (((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m);
      	tmp = 0.0;
      	if ((t_0 <= -1e-304) || ~((t_0 <= Inf)))
      		tmp = (-x_46_im * x_46_im) * x_46_im;
      	else
      		tmp = 3.0 * ((x_46_im * x_46_re_m) * x_46_re_m);
      	end
      	tmp_2 = tmp;
      end
      
      x.re_m = N[Abs[x$46$re], $MachinePrecision]
      code[x$46$re$95$m_, x$46$im_] := Block[{t$95$0 = N[(N[(N[(N[(x$46$re$95$m * x$46$re$95$m), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision] + N[(N[(N[(x$46$re$95$m * x$46$im), $MachinePrecision] + N[(x$46$im * x$46$re$95$m), $MachinePrecision]), $MachinePrecision] * x$46$re$95$m), $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[t$95$0, -1e-304], N[Not[LessEqual[t$95$0, Infinity]], $MachinePrecision]], N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision], N[(3.0 * N[(N[(x$46$im * x$46$re$95$m), $MachinePrecision] * x$46$re$95$m), $MachinePrecision]), $MachinePrecision]]]
      
      \begin{array}{l}
      x.re_m = \left|x.re\right|
      
      \\
      \begin{array}{l}
      t_0 := \left(x.re\_m \cdot x.re\_m - x.im \cdot x.im\right) \cdot x.im + \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m\\
      \mathbf{if}\;t\_0 \leq -1 \cdot 10^{-304} \lor \neg \left(t\_0 \leq \infty\right):\\
      \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\
      
      \mathbf{else}:\\
      \;\;\;\;3 \cdot \left(\left(x.im \cdot x.re\_m\right) \cdot x.re\_m\right)\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if (+.f64 (*.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)) < -9.99999999999999971e-305 or +inf.0 < (+.f64 (*.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))

        1. Initial program 68.8%

          \[\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. Add Preprocessing
        3. Taylor expanded in x.re around 0

          \[\leadsto \color{blue}{-1 \cdot {x.im}^{3}} \]
        4. Step-by-step derivation
          1. mul-1-negN/A

            \[\leadsto \color{blue}{\mathsf{neg}\left({x.im}^{3}\right)} \]
          2. cube-neg-revN/A

            \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
          3. lower-pow.f64N/A

            \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
          4. lower-neg.f6454.0

            \[\leadsto {\color{blue}{\left(-x.im\right)}}^{3} \]
        5. Applied rewrites54.0%

          \[\leadsto \color{blue}{{\left(-x.im\right)}^{3}} \]
        6. Step-by-step derivation
          1. Applied rewrites53.9%

            \[\leadsto \left(\left(-x.im\right) \cdot x.im\right) \cdot \color{blue}{x.im} \]

          if -9.99999999999999971e-305 < (+.f64 (*.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)) < +inf.0

          1. Initial program 96.7%

            \[\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. Add Preprocessing
          3. Taylor expanded in x.re around inf

            \[\leadsto \color{blue}{{x.re}^{2} \cdot \left(x.im + 2 \cdot x.im\right)} \]
          4. Step-by-step derivation
            1. *-commutativeN/A

              \[\leadsto \color{blue}{\left(x.im + 2 \cdot x.im\right) \cdot {x.re}^{2}} \]
            2. unpow2N/A

              \[\leadsto \left(x.im + 2 \cdot x.im\right) \cdot \color{blue}{\left(x.re \cdot x.re\right)} \]
            3. associate-*r*N/A

              \[\leadsto \color{blue}{\left(\left(x.im + 2 \cdot x.im\right) \cdot x.re\right) \cdot x.re} \]
            4. lower-*.f64N/A

              \[\leadsto \color{blue}{\left(\left(x.im + 2 \cdot x.im\right) \cdot x.re\right) \cdot x.re} \]
            5. *-commutativeN/A

              \[\leadsto \color{blue}{\left(x.re \cdot \left(x.im + 2 \cdot x.im\right)\right)} \cdot x.re \]
            6. distribute-rgt1-inN/A

              \[\leadsto \left(x.re \cdot \color{blue}{\left(\left(2 + 1\right) \cdot x.im\right)}\right) \cdot x.re \]
            7. metadata-evalN/A

              \[\leadsto \left(x.re \cdot \left(\color{blue}{3} \cdot x.im\right)\right) \cdot x.re \]
            8. associate-*r*N/A

              \[\leadsto \color{blue}{\left(\left(x.re \cdot 3\right) \cdot x.im\right)} \cdot x.re \]
            9. *-commutativeN/A

              \[\leadsto \left(\color{blue}{\left(3 \cdot x.re\right)} \cdot x.im\right) \cdot x.re \]
            10. lower-*.f64N/A

              \[\leadsto \color{blue}{\left(\left(3 \cdot x.re\right) \cdot x.im\right)} \cdot x.re \]
            11. lower-*.f6466.9

              \[\leadsto \left(\color{blue}{\left(3 \cdot x.re\right)} \cdot x.im\right) \cdot x.re \]
          5. Applied rewrites66.9%

            \[\leadsto \color{blue}{\left(\left(3 \cdot x.re\right) \cdot x.im\right) \cdot x.re} \]
          6. Step-by-step derivation
            1. Applied rewrites66.9%

              \[\leadsto 3 \cdot \color{blue}{\left(\left(x.im \cdot x.re\right) \cdot x.re\right)} \]
          7. Recombined 2 regimes into one program.
          8. Final simplification60.1%

            \[\leadsto \begin{array}{l} \mathbf{if}\;\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 \leq -1 \cdot 10^{-304} \lor \neg \left(\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 \leq \infty\right):\\ \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\ \mathbf{else}:\\ \;\;\;\;3 \cdot \left(\left(x.im \cdot x.re\right) \cdot x.re\right)\\ \end{array} \]
          9. Add Preprocessing

          Alternative 4: 99.8% accurate, 0.5× speedup?

          \[\begin{array}{l} x.re_m = \left|x.re\right| \\ \begin{array}{l} t_0 := \left(x.re\_m - x.im\right) \cdot x.im\\ t_1 := \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m\\ \mathbf{if}\;\left(x.re\_m \cdot x.re\_m - x.im \cdot x.im\right) \cdot x.im + t\_1 \leq \infty:\\ \;\;\;\;\left(x.im + x.re\_m\right) \cdot t\_0 + t\_1\\ \mathbf{else}:\\ \;\;\;\;\frac{t\_0 \cdot \left(\left(x.im + x.re\_m\right) \cdot \left(x.im - x.re\_m\right)\right)}{x.im - x.re\_m}\\ \end{array} \end{array} \]
          x.re_m = (fabs.f64 x.re)
          (FPCore (x.re_m x.im)
           :precision binary64
           (let* ((t_0 (* (- x.re_m x.im) x.im))
                  (t_1 (* (+ (* x.re_m x.im) (* x.im x.re_m)) x.re_m)))
             (if (<= (+ (* (- (* x.re_m x.re_m) (* x.im x.im)) x.im) t_1) INFINITY)
               (+ (* (+ x.im x.re_m) t_0) t_1)
               (/ (* t_0 (* (+ x.im x.re_m) (- x.im x.re_m))) (- x.im x.re_m)))))
          x.re_m = fabs(x_46_re);
          double code(double x_46_re_m, double x_46_im) {
          	double t_0 = (x_46_re_m - x_46_im) * x_46_im;
          	double t_1 = ((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m;
          	double tmp;
          	if (((((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + t_1) <= ((double) INFINITY)) {
          		tmp = ((x_46_im + x_46_re_m) * t_0) + t_1;
          	} else {
          		tmp = (t_0 * ((x_46_im + x_46_re_m) * (x_46_im - x_46_re_m))) / (x_46_im - x_46_re_m);
          	}
          	return tmp;
          }
          
          x.re_m = Math.abs(x_46_re);
          public static double code(double x_46_re_m, double x_46_im) {
          	double t_0 = (x_46_re_m - x_46_im) * x_46_im;
          	double t_1 = ((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m;
          	double tmp;
          	if (((((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + t_1) <= Double.POSITIVE_INFINITY) {
          		tmp = ((x_46_im + x_46_re_m) * t_0) + t_1;
          	} else {
          		tmp = (t_0 * ((x_46_im + x_46_re_m) * (x_46_im - x_46_re_m))) / (x_46_im - x_46_re_m);
          	}
          	return tmp;
          }
          
          x.re_m = math.fabs(x_46_re)
          def code(x_46_re_m, x_46_im):
          	t_0 = (x_46_re_m - x_46_im) * x_46_im
          	t_1 = ((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m
          	tmp = 0
          	if ((((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + t_1) <= math.inf:
          		tmp = ((x_46_im + x_46_re_m) * t_0) + t_1
          	else:
          		tmp = (t_0 * ((x_46_im + x_46_re_m) * (x_46_im - x_46_re_m))) / (x_46_im - x_46_re_m)
          	return tmp
          
          x.re_m = abs(x_46_re)
          function code(x_46_re_m, x_46_im)
          	t_0 = Float64(Float64(x_46_re_m - x_46_im) * x_46_im)
          	t_1 = Float64(Float64(Float64(x_46_re_m * x_46_im) + Float64(x_46_im * x_46_re_m)) * x_46_re_m)
          	tmp = 0.0
          	if (Float64(Float64(Float64(Float64(x_46_re_m * x_46_re_m) - Float64(x_46_im * x_46_im)) * x_46_im) + t_1) <= Inf)
          		tmp = Float64(Float64(Float64(x_46_im + x_46_re_m) * t_0) + t_1);
          	else
          		tmp = Float64(Float64(t_0 * Float64(Float64(x_46_im + x_46_re_m) * Float64(x_46_im - x_46_re_m))) / Float64(x_46_im - x_46_re_m));
          	end
          	return tmp
          end
          
          x.re_m = abs(x_46_re);
          function tmp_2 = code(x_46_re_m, x_46_im)
          	t_0 = (x_46_re_m - x_46_im) * x_46_im;
          	t_1 = ((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m;
          	tmp = 0.0;
          	if (((((x_46_re_m * x_46_re_m) - (x_46_im * x_46_im)) * x_46_im) + t_1) <= Inf)
          		tmp = ((x_46_im + x_46_re_m) * t_0) + t_1;
          	else
          		tmp = (t_0 * ((x_46_im + x_46_re_m) * (x_46_im - x_46_re_m))) / (x_46_im - x_46_re_m);
          	end
          	tmp_2 = tmp;
          end
          
          x.re_m = N[Abs[x$46$re], $MachinePrecision]
          code[x$46$re$95$m_, x$46$im_] := Block[{t$95$0 = N[(N[(x$46$re$95$m - x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[(x$46$re$95$m * x$46$im), $MachinePrecision] + N[(x$46$im * x$46$re$95$m), $MachinePrecision]), $MachinePrecision] * x$46$re$95$m), $MachinePrecision]}, If[LessEqual[N[(N[(N[(N[(x$46$re$95$m * x$46$re$95$m), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision] + t$95$1), $MachinePrecision], Infinity], N[(N[(N[(x$46$im + x$46$re$95$m), $MachinePrecision] * t$95$0), $MachinePrecision] + t$95$1), $MachinePrecision], N[(N[(t$95$0 * N[(N[(x$46$im + x$46$re$95$m), $MachinePrecision] * N[(x$46$im - x$46$re$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(x$46$im - x$46$re$95$m), $MachinePrecision]), $MachinePrecision]]]]
          
          \begin{array}{l}
          x.re_m = \left|x.re\right|
          
          \\
          \begin{array}{l}
          t_0 := \left(x.re\_m - x.im\right) \cdot x.im\\
          t_1 := \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m\\
          \mathbf{if}\;\left(x.re\_m \cdot x.re\_m - x.im \cdot x.im\right) \cdot x.im + t\_1 \leq \infty:\\
          \;\;\;\;\left(x.im + x.re\_m\right) \cdot t\_0 + t\_1\\
          
          \mathbf{else}:\\
          \;\;\;\;\frac{t\_0 \cdot \left(\left(x.im + x.re\_m\right) \cdot \left(x.im - x.re\_m\right)\right)}{x.im - x.re\_m}\\
          
          
          \end{array}
          \end{array}
          
          Derivation
          1. Split input into 2 regimes
          2. if (+.f64 (*.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)) < +inf.0

            1. Initial program 94.3%

              \[\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. Add Preprocessing
            3. Step-by-step derivation
              1. lift-*.f64N/A

                \[\leadsto \color{blue}{\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. lift--.f64N/A

                \[\leadsto \color{blue}{\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 \]
              3. lift-*.f64N/A

                \[\leadsto \left(\color{blue}{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 \]
              4. lift-*.f64N/A

                \[\leadsto \left(x.re \cdot x.re - \color{blue}{x.im \cdot x.im}\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              5. difference-of-squaresN/A

                \[\leadsto \color{blue}{\left(\left(x.re + x.im\right) \cdot \left(x.re - x.im\right)\right)} \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              6. associate-*l*N/A

                \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              7. lower-*.f64N/A

                \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              8. +-commutativeN/A

                \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              9. lower-+.f64N/A

                \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              10. lower-*.f64N/A

                \[\leadsto \left(x.im + x.re\right) \cdot \color{blue}{\left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              11. lower--.f6499.7

                \[\leadsto \left(x.im + x.re\right) \cdot \left(\color{blue}{\left(x.re - x.im\right)} \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
            4. Applied rewrites99.7%

              \[\leadsto \color{blue}{\left(x.im + x.re\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]

            if +inf.0 < (+.f64 (*.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))

            1. Initial program 0.0%

              \[\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. Add Preprocessing
            3. Step-by-step derivation
              1. lift-*.f64N/A

                \[\leadsto \color{blue}{\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. lift--.f64N/A

                \[\leadsto \color{blue}{\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 \]
              3. lift-*.f64N/A

                \[\leadsto \left(\color{blue}{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 \]
              4. lift-*.f64N/A

                \[\leadsto \left(x.re \cdot x.re - \color{blue}{x.im \cdot x.im}\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              5. difference-of-squaresN/A

                \[\leadsto \color{blue}{\left(\left(x.re + x.im\right) \cdot \left(x.re - x.im\right)\right)} \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              6. associate-*l*N/A

                \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              7. lower-*.f64N/A

                \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              8. +-commutativeN/A

                \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              9. lower-+.f64N/A

                \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              10. lower-*.f64N/A

                \[\leadsto \left(x.im + x.re\right) \cdot \color{blue}{\left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              11. lower--.f6421.2

                \[\leadsto \left(x.im + x.re\right) \cdot \left(\color{blue}{\left(x.re - x.im\right)} \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
            4. Applied rewrites21.2%

              \[\leadsto \color{blue}{\left(x.im + x.re\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
            5. Step-by-step derivation
              1. lift-*.f64N/A

                \[\leadsto \color{blue}{\left(x.im + x.re\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              2. *-commutativeN/A

                \[\leadsto \color{blue}{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im + x.re\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              3. lift-+.f64N/A

                \[\leadsto \left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \color{blue}{\left(x.im + x.re\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              4. flip-+N/A

                \[\leadsto \left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \color{blue}{\frac{x.im \cdot x.im - x.re \cdot x.re}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              5. associate-*r/N/A

                \[\leadsto \color{blue}{\frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im \cdot x.im - x.re \cdot x.re\right)}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              6. lower-/.f64N/A

                \[\leadsto \color{blue}{\frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im \cdot x.im - x.re \cdot x.re\right)}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              7. lower-*.f64N/A

                \[\leadsto \frac{\color{blue}{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im \cdot x.im - x.re \cdot x.re\right)}}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              8. difference-of-squaresN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \color{blue}{\left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              9. lift-+.f64N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\color{blue}{\left(x.im + x.re\right)} \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              10. lower-*.f64N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \color{blue}{\left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              11. lower--.f64N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \color{blue}{\left(x.im - x.re\right)}\right)}{x.im - x.re} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              12. lower--.f6421.2

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{\color{blue}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
            6. Applied rewrites21.2%

              \[\leadsto \color{blue}{\frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re}} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
            7. Step-by-step derivation
              1. lift-*.f64N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + \color{blue}{\left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re} \]
              2. *-commutativeN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + \color{blue}{x.re \cdot \left(x.re \cdot x.im + x.im \cdot x.re\right)} \]
              3. lift-+.f64N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{\left(x.re \cdot x.im + x.im \cdot x.re\right)} \]
              4. +-commutativeN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{\left(x.im \cdot x.re + x.re \cdot x.im\right)} \]
              5. lift-*.f64N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re + \color{blue}{x.re \cdot x.im}\right) \]
              6. fp-cancel-sign-sub-invN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{\left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot x.im\right)} \]
              7. unpow1N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot \color{blue}{{x.im}^{1}}\right) \]
              8. metadata-evalN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot {x.im}^{\color{blue}{\left(\frac{2}{2}\right)}}\right) \]
              9. sqrt-pow1N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot \color{blue}{\sqrt{{x.im}^{2}}}\right) \]
              10. pow2N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot \sqrt{\color{blue}{x.im \cdot x.im}}\right) \]
              11. rem-sqrt-square-revN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \left(\mathsf{neg}\left(x.re\right)\right) \cdot \color{blue}{\left|x.im\right|}\right) \]
              12. rem-square-sqrtN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{\left(\sqrt{\mathsf{neg}\left(x.re\right)} \cdot \sqrt{\mathsf{neg}\left(x.re\right)}\right)} \cdot \left|x.im\right|\right) \]
              13. sqrt-prodN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{\sqrt{\left(\mathsf{neg}\left(x.re\right)\right) \cdot \left(\mathsf{neg}\left(x.re\right)\right)}} \cdot \left|x.im\right|\right) \]
              14. sqr-neg-revN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \sqrt{\color{blue}{x.re \cdot x.re}} \cdot \left|x.im\right|\right) \]
              15. sqrt-unprodN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{\left(\sqrt{x.re} \cdot \sqrt{x.re}\right)} \cdot \left|x.im\right|\right) \]
              16. rem-square-sqrtN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{x.re} \cdot \left|x.im\right|\right) \]
              17. rem-sqrt-square-revN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot \color{blue}{\sqrt{x.im \cdot x.im}}\right) \]
              18. pow2N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot \sqrt{\color{blue}{{x.im}^{2}}}\right) \]
              19. sqrt-pow1N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot \color{blue}{{x.im}^{\left(\frac{2}{2}\right)}}\right) \]
              20. metadata-evalN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot {x.im}^{\color{blue}{1}}\right) \]
              21. unpow1N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - x.re \cdot \color{blue}{x.im}\right) \]
              22. *-commutativeN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{x.im \cdot x.re}\right) \]
              23. lift-*.f64N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(x.im \cdot x.re - \color{blue}{x.im \cdot x.re}\right) \]
              24. +-inversesN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{0} \]
              25. +-inversesN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \color{blue}{\left(\left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right) - \left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right)\right)} \]
              26. lift-*.f64N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(\left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right) - \color{blue}{\left(x.im \cdot x.re\right)} \cdot \left(x.im \cdot x.re\right)\right) \]
              27. *-commutativeN/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(\left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right) - \color{blue}{\left(x.re \cdot x.im\right)} \cdot \left(x.im \cdot x.re\right)\right) \]
              28. lift-*.f64N/A

                \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + x.re \cdot \left(\left(x.im \cdot x.re\right) \cdot \left(x.im \cdot x.re\right) - \color{blue}{\left(x.re \cdot x.im\right)} \cdot \left(x.im \cdot x.re\right)\right) \]
            8. Applied rewrites100.0%

              \[\leadsto \frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re} + \color{blue}{x.re \cdot 0} \]
          3. Recombined 2 regimes into one program.
          4. Final simplification99.8%

            \[\leadsto \begin{array}{l} \mathbf{if}\;\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 \leq \infty:\\ \;\;\;\;\left(x.im + x.re\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(\left(x.im + x.re\right) \cdot \left(x.im - x.re\right)\right)}{x.im - x.re}\\ \end{array} \]
          5. Add Preprocessing

          Alternative 5: 94.6% accurate, 0.9× speedup?

          \[\begin{array}{l} x.re_m = \left|x.re\right| \\ \begin{array}{l} \mathbf{if}\;x.im \leq 1.65 \cdot 10^{+199}:\\ \;\;\;\;\left(x.im + x.re\_m\right) \cdot \left(\left(x.re\_m - x.im\right) \cdot x.im\right) + \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m\\ \mathbf{else}:\\ \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\ \end{array} \end{array} \]
          x.re_m = (fabs.f64 x.re)
          (FPCore (x.re_m x.im)
           :precision binary64
           (if (<= x.im 1.65e+199)
             (+
              (* (+ x.im x.re_m) (* (- x.re_m x.im) x.im))
              (* (+ (* x.re_m x.im) (* x.im x.re_m)) x.re_m))
             (* (* (- x.im) x.im) x.im)))
          x.re_m = fabs(x_46_re);
          double code(double x_46_re_m, double x_46_im) {
          	double tmp;
          	if (x_46_im <= 1.65e+199) {
          		tmp = ((x_46_im + x_46_re_m) * ((x_46_re_m - x_46_im) * x_46_im)) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m);
          	} else {
          		tmp = (-x_46_im * x_46_im) * x_46_im;
          	}
          	return tmp;
          }
          
          x.re_m = abs(x_46re)
          real(8) function code(x_46re_m, x_46im)
              real(8), intent (in) :: x_46re_m
              real(8), intent (in) :: x_46im
              real(8) :: tmp
              if (x_46im <= 1.65d+199) then
                  tmp = ((x_46im + x_46re_m) * ((x_46re_m - x_46im) * x_46im)) + (((x_46re_m * x_46im) + (x_46im * x_46re_m)) * x_46re_m)
              else
                  tmp = (-x_46im * x_46im) * x_46im
              end if
              code = tmp
          end function
          
          x.re_m = Math.abs(x_46_re);
          public static double code(double x_46_re_m, double x_46_im) {
          	double tmp;
          	if (x_46_im <= 1.65e+199) {
          		tmp = ((x_46_im + x_46_re_m) * ((x_46_re_m - x_46_im) * x_46_im)) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m);
          	} else {
          		tmp = (-x_46_im * x_46_im) * x_46_im;
          	}
          	return tmp;
          }
          
          x.re_m = math.fabs(x_46_re)
          def code(x_46_re_m, x_46_im):
          	tmp = 0
          	if x_46_im <= 1.65e+199:
          		tmp = ((x_46_im + x_46_re_m) * ((x_46_re_m - x_46_im) * x_46_im)) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m)
          	else:
          		tmp = (-x_46_im * x_46_im) * x_46_im
          	return tmp
          
          x.re_m = abs(x_46_re)
          function code(x_46_re_m, x_46_im)
          	tmp = 0.0
          	if (x_46_im <= 1.65e+199)
          		tmp = Float64(Float64(Float64(x_46_im + x_46_re_m) * Float64(Float64(x_46_re_m - x_46_im) * x_46_im)) + Float64(Float64(Float64(x_46_re_m * x_46_im) + Float64(x_46_im * x_46_re_m)) * x_46_re_m));
          	else
          		tmp = Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im);
          	end
          	return tmp
          end
          
          x.re_m = abs(x_46_re);
          function tmp_2 = code(x_46_re_m, x_46_im)
          	tmp = 0.0;
          	if (x_46_im <= 1.65e+199)
          		tmp = ((x_46_im + x_46_re_m) * ((x_46_re_m - x_46_im) * x_46_im)) + (((x_46_re_m * x_46_im) + (x_46_im * x_46_re_m)) * x_46_re_m);
          	else
          		tmp = (-x_46_im * x_46_im) * x_46_im;
          	end
          	tmp_2 = tmp;
          end
          
          x.re_m = N[Abs[x$46$re], $MachinePrecision]
          code[x$46$re$95$m_, x$46$im_] := If[LessEqual[x$46$im, 1.65e+199], N[(N[(N[(x$46$im + x$46$re$95$m), $MachinePrecision] * N[(N[(x$46$re$95$m - x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]), $MachinePrecision] + N[(N[(N[(x$46$re$95$m * x$46$im), $MachinePrecision] + N[(x$46$im * x$46$re$95$m), $MachinePrecision]), $MachinePrecision] * x$46$re$95$m), $MachinePrecision]), $MachinePrecision], N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]]
          
          \begin{array}{l}
          x.re_m = \left|x.re\right|
          
          \\
          \begin{array}{l}
          \mathbf{if}\;x.im \leq 1.65 \cdot 10^{+199}:\\
          \;\;\;\;\left(x.im + x.re\_m\right) \cdot \left(\left(x.re\_m - x.im\right) \cdot x.im\right) + \left(x.re\_m \cdot x.im + x.im \cdot x.re\_m\right) \cdot x.re\_m\\
          
          \mathbf{else}:\\
          \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\
          
          
          \end{array}
          \end{array}
          
          Derivation
          1. Split input into 2 regimes
          2. if x.im < 1.6499999999999999e199

            1. Initial program 86.4%

              \[\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. Add Preprocessing
            3. Step-by-step derivation
              1. lift-*.f64N/A

                \[\leadsto \color{blue}{\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. lift--.f64N/A

                \[\leadsto \color{blue}{\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 \]
              3. lift-*.f64N/A

                \[\leadsto \left(\color{blue}{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 \]
              4. lift-*.f64N/A

                \[\leadsto \left(x.re \cdot x.re - \color{blue}{x.im \cdot x.im}\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              5. difference-of-squaresN/A

                \[\leadsto \color{blue}{\left(\left(x.re + x.im\right) \cdot \left(x.re - x.im\right)\right)} \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              6. associate-*l*N/A

                \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              7. lower-*.f64N/A

                \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              8. +-commutativeN/A

                \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              9. lower-+.f64N/A

                \[\leadsto \color{blue}{\left(x.im + x.re\right)} \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              10. lower-*.f64N/A

                \[\leadsto \left(x.im + x.re\right) \cdot \color{blue}{\left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
              11. lower--.f6494.6

                \[\leadsto \left(x.im + x.re\right) \cdot \left(\color{blue}{\left(x.re - x.im\right)} \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
            4. Applied rewrites94.6%

              \[\leadsto \color{blue}{\left(x.im + x.re\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]

            if 1.6499999999999999e199 < x.im

            1. Initial program 39.1%

              \[\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. Add Preprocessing
            3. Taylor expanded in x.re around 0

              \[\leadsto \color{blue}{-1 \cdot {x.im}^{3}} \]
            4. Step-by-step derivation
              1. mul-1-negN/A

                \[\leadsto \color{blue}{\mathsf{neg}\left({x.im}^{3}\right)} \]
              2. cube-neg-revN/A

                \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
              3. lower-pow.f64N/A

                \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
              4. lower-neg.f64100.0

                \[\leadsto {\color{blue}{\left(-x.im\right)}}^{3} \]
            5. Applied rewrites100.0%

              \[\leadsto \color{blue}{{\left(-x.im\right)}^{3}} \]
            6. Step-by-step derivation
              1. Applied rewrites100.0%

                \[\leadsto \left(\left(-x.im\right) \cdot x.im\right) \cdot \color{blue}{x.im} \]
            7. Recombined 2 regimes into one program.
            8. Add Preprocessing

            Alternative 6: 76.3% accurate, 1.1× speedup?

            \[\begin{array}{l} x.re_m = \left|x.re\right| \\ \begin{array}{l} \mathbf{if}\;x.im \leq 6.6 \cdot 10^{-118}:\\ \;\;\;\;\left(x.im \cdot x.re\_m\right) \cdot \left(3 \cdot x.re\_m\right)\\ \mathbf{elif}\;x.im \leq 5 \cdot 10^{+200}:\\ \;\;\;\;\left(-x.im\right) \cdot \mathsf{fma}\left(x.im, x.im, -3 \cdot \left(x.re\_m \cdot x.re\_m\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\ \end{array} \end{array} \]
            x.re_m = (fabs.f64 x.re)
            (FPCore (x.re_m x.im)
             :precision binary64
             (if (<= x.im 6.6e-118)
               (* (* x.im x.re_m) (* 3.0 x.re_m))
               (if (<= x.im 5e+200)
                 (* (- x.im) (fma x.im x.im (* -3.0 (* x.re_m x.re_m))))
                 (* (* (- x.im) x.im) x.im))))
            x.re_m = fabs(x_46_re);
            double code(double x_46_re_m, double x_46_im) {
            	double tmp;
            	if (x_46_im <= 6.6e-118) {
            		tmp = (x_46_im * x_46_re_m) * (3.0 * x_46_re_m);
            	} else if (x_46_im <= 5e+200) {
            		tmp = -x_46_im * fma(x_46_im, x_46_im, (-3.0 * (x_46_re_m * x_46_re_m)));
            	} else {
            		tmp = (-x_46_im * x_46_im) * x_46_im;
            	}
            	return tmp;
            }
            
            x.re_m = abs(x_46_re)
            function code(x_46_re_m, x_46_im)
            	tmp = 0.0
            	if (x_46_im <= 6.6e-118)
            		tmp = Float64(Float64(x_46_im * x_46_re_m) * Float64(3.0 * x_46_re_m));
            	elseif (x_46_im <= 5e+200)
            		tmp = Float64(Float64(-x_46_im) * fma(x_46_im, x_46_im, Float64(-3.0 * Float64(x_46_re_m * x_46_re_m))));
            	else
            		tmp = Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im);
            	end
            	return tmp
            end
            
            x.re_m = N[Abs[x$46$re], $MachinePrecision]
            code[x$46$re$95$m_, x$46$im_] := If[LessEqual[x$46$im, 6.6e-118], N[(N[(x$46$im * x$46$re$95$m), $MachinePrecision] * N[(3.0 * x$46$re$95$m), $MachinePrecision]), $MachinePrecision], If[LessEqual[x$46$im, 5e+200], N[((-x$46$im) * N[(x$46$im * x$46$im + N[(-3.0 * N[(x$46$re$95$m * x$46$re$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]]]
            
            \begin{array}{l}
            x.re_m = \left|x.re\right|
            
            \\
            \begin{array}{l}
            \mathbf{if}\;x.im \leq 6.6 \cdot 10^{-118}:\\
            \;\;\;\;\left(x.im \cdot x.re\_m\right) \cdot \left(3 \cdot x.re\_m\right)\\
            
            \mathbf{elif}\;x.im \leq 5 \cdot 10^{+200}:\\
            \;\;\;\;\left(-x.im\right) \cdot \mathsf{fma}\left(x.im, x.im, -3 \cdot \left(x.re\_m \cdot x.re\_m\right)\right)\\
            
            \mathbf{else}:\\
            \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\
            
            
            \end{array}
            \end{array}
            
            Derivation
            1. Split input into 3 regimes
            2. if x.im < 6.5999999999999999e-118

              1. Initial program 84.8%

                \[\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. Add Preprocessing
              3. Taylor expanded in x.re around inf

                \[\leadsto \color{blue}{{x.re}^{2} \cdot \left(x.im + 2 \cdot x.im\right)} \]
              4. Step-by-step derivation
                1. *-commutativeN/A

                  \[\leadsto \color{blue}{\left(x.im + 2 \cdot x.im\right) \cdot {x.re}^{2}} \]
                2. unpow2N/A

                  \[\leadsto \left(x.im + 2 \cdot x.im\right) \cdot \color{blue}{\left(x.re \cdot x.re\right)} \]
                3. associate-*r*N/A

                  \[\leadsto \color{blue}{\left(\left(x.im + 2 \cdot x.im\right) \cdot x.re\right) \cdot x.re} \]
                4. lower-*.f64N/A

                  \[\leadsto \color{blue}{\left(\left(x.im + 2 \cdot x.im\right) \cdot x.re\right) \cdot x.re} \]
                5. *-commutativeN/A

                  \[\leadsto \color{blue}{\left(x.re \cdot \left(x.im + 2 \cdot x.im\right)\right)} \cdot x.re \]
                6. distribute-rgt1-inN/A

                  \[\leadsto \left(x.re \cdot \color{blue}{\left(\left(2 + 1\right) \cdot x.im\right)}\right) \cdot x.re \]
                7. metadata-evalN/A

                  \[\leadsto \left(x.re \cdot \left(\color{blue}{3} \cdot x.im\right)\right) \cdot x.re \]
                8. associate-*r*N/A

                  \[\leadsto \color{blue}{\left(\left(x.re \cdot 3\right) \cdot x.im\right)} \cdot x.re \]
                9. *-commutativeN/A

                  \[\leadsto \left(\color{blue}{\left(3 \cdot x.re\right)} \cdot x.im\right) \cdot x.re \]
                10. lower-*.f64N/A

                  \[\leadsto \color{blue}{\left(\left(3 \cdot x.re\right) \cdot x.im\right)} \cdot x.re \]
                11. lower-*.f6470.3

                  \[\leadsto \left(\color{blue}{\left(3 \cdot x.re\right)} \cdot x.im\right) \cdot x.re \]
              5. Applied rewrites70.3%

                \[\leadsto \color{blue}{\left(\left(3 \cdot x.re\right) \cdot x.im\right) \cdot x.re} \]
              6. Step-by-step derivation
                1. Applied rewrites70.3%

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

                if 6.5999999999999999e-118 < x.im < 5.00000000000000019e200

                1. Initial program 90.4%

                  \[\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. Add Preprocessing
                3. Taylor expanded in x.re around 0

                  \[\leadsto \color{blue}{-1 \cdot {x.im}^{3} + {x.re}^{2} \cdot \left(x.im + 2 \cdot x.im\right)} \]
                4. Step-by-step derivation
                  1. +-commutativeN/A

                    \[\leadsto -1 \cdot {x.im}^{3} + {x.re}^{2} \cdot \color{blue}{\left(2 \cdot x.im + x.im\right)} \]
                  2. distribute-rgt-inN/A

                    \[\leadsto -1 \cdot {x.im}^{3} + \color{blue}{\left(\left(2 \cdot x.im\right) \cdot {x.re}^{2} + x.im \cdot {x.re}^{2}\right)} \]
                  3. *-commutativeN/A

                    \[\leadsto -1 \cdot {x.im}^{3} + \left(\color{blue}{\left(x.im \cdot 2\right)} \cdot {x.re}^{2} + x.im \cdot {x.re}^{2}\right) \]
                  4. associate-*r*N/A

                    \[\leadsto -1 \cdot {x.im}^{3} + \left(\color{blue}{x.im \cdot \left(2 \cdot {x.re}^{2}\right)} + x.im \cdot {x.re}^{2}\right) \]
                  5. distribute-lft-inN/A

                    \[\leadsto -1 \cdot {x.im}^{3} + \color{blue}{x.im \cdot \left(2 \cdot {x.re}^{2} + {x.re}^{2}\right)} \]
                  6. fp-cancel-sign-sub-invN/A

                    \[\leadsto \color{blue}{-1 \cdot {x.im}^{3} - \left(\mathsf{neg}\left(x.im\right)\right) \cdot \left(2 \cdot {x.re}^{2} + {x.re}^{2}\right)} \]
                  7. mul-1-negN/A

                    \[\leadsto \color{blue}{\left(\mathsf{neg}\left({x.im}^{3}\right)\right)} - \left(\mathsf{neg}\left(x.im\right)\right) \cdot \left(2 \cdot {x.re}^{2} + {x.re}^{2}\right) \]
                  8. cube-multN/A

                    \[\leadsto \left(\mathsf{neg}\left(\color{blue}{x.im \cdot \left(x.im \cdot x.im\right)}\right)\right) - \left(\mathsf{neg}\left(x.im\right)\right) \cdot \left(2 \cdot {x.re}^{2} + {x.re}^{2}\right) \]
                  9. unpow2N/A

                    \[\leadsto \left(\mathsf{neg}\left(x.im \cdot \color{blue}{{x.im}^{2}}\right)\right) - \left(\mathsf{neg}\left(x.im\right)\right) \cdot \left(2 \cdot {x.re}^{2} + {x.re}^{2}\right) \]
                  10. distribute-lft-neg-inN/A

                    \[\leadsto \color{blue}{\left(\mathsf{neg}\left(x.im\right)\right) \cdot {x.im}^{2}} - \left(\mathsf{neg}\left(x.im\right)\right) \cdot \left(2 \cdot {x.re}^{2} + {x.re}^{2}\right) \]
                  11. distribute-lft-out--N/A

                    \[\leadsto \color{blue}{\left(\mathsf{neg}\left(x.im\right)\right) \cdot \left({x.im}^{2} - \left(2 \cdot {x.re}^{2} + {x.re}^{2}\right)\right)} \]
                  12. lower-*.f64N/A

                    \[\leadsto \color{blue}{\left(\mathsf{neg}\left(x.im\right)\right) \cdot \left({x.im}^{2} - \left(2 \cdot {x.re}^{2} + {x.re}^{2}\right)\right)} \]
                  13. lower-neg.f64N/A

                    \[\leadsto \color{blue}{\left(-x.im\right)} \cdot \left({x.im}^{2} - \left(2 \cdot {x.re}^{2} + {x.re}^{2}\right)\right) \]
                  14. distribute-lft1-inN/A

                    \[\leadsto \left(-x.im\right) \cdot \left({x.im}^{2} - \color{blue}{\left(2 + 1\right) \cdot {x.re}^{2}}\right) \]
                  15. metadata-evalN/A

                    \[\leadsto \left(-x.im\right) \cdot \left({x.im}^{2} - \color{blue}{3} \cdot {x.re}^{2}\right) \]
                  16. *-commutativeN/A

                    \[\leadsto \left(-x.im\right) \cdot \left({x.im}^{2} - \color{blue}{{x.re}^{2} \cdot 3}\right) \]
                  17. remove-double-negN/A

                    \[\leadsto \left(-x.im\right) \cdot \left({x.im}^{2} - \color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left({x.re}^{2}\right)\right)\right)\right)} \cdot 3\right) \]
                5. Applied rewrites98.1%

                  \[\leadsto \color{blue}{\left(-x.im\right) \cdot \mathsf{fma}\left(x.im, x.im, -3 \cdot \left(x.re \cdot x.re\right)\right)} \]

                if 5.00000000000000019e200 < x.im

                1. Initial program 39.1%

                  \[\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. Add Preprocessing
                3. Taylor expanded in x.re around 0

                  \[\leadsto \color{blue}{-1 \cdot {x.im}^{3}} \]
                4. Step-by-step derivation
                  1. mul-1-negN/A

                    \[\leadsto \color{blue}{\mathsf{neg}\left({x.im}^{3}\right)} \]
                  2. cube-neg-revN/A

                    \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
                  3. lower-pow.f64N/A

                    \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
                  4. lower-neg.f64100.0

                    \[\leadsto {\color{blue}{\left(-x.im\right)}}^{3} \]
                5. Applied rewrites100.0%

                  \[\leadsto \color{blue}{{\left(-x.im\right)}^{3}} \]
                6. Step-by-step derivation
                  1. Applied rewrites100.0%

                    \[\leadsto \left(\left(-x.im\right) \cdot x.im\right) \cdot \color{blue}{x.im} \]
                7. Recombined 3 regimes into one program.
                8. Add Preprocessing

                Alternative 7: 62.2% accurate, 2.1× speedup?

                \[\begin{array}{l} x.re_m = \left|x.re\right| \\ \begin{array}{l} \mathbf{if}\;x.re\_m \leq 8.6 \cdot 10^{+200}:\\ \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\ \mathbf{else}:\\ \;\;\;\;\left(x.im \cdot x.im\right) \cdot x.im\\ \end{array} \end{array} \]
                x.re_m = (fabs.f64 x.re)
                (FPCore (x.re_m x.im)
                 :precision binary64
                 (if (<= x.re_m 8.6e+200) (* (* (- x.im) x.im) x.im) (* (* x.im x.im) x.im)))
                x.re_m = fabs(x_46_re);
                double code(double x_46_re_m, double x_46_im) {
                	double tmp;
                	if (x_46_re_m <= 8.6e+200) {
                		tmp = (-x_46_im * x_46_im) * x_46_im;
                	} else {
                		tmp = (x_46_im * x_46_im) * x_46_im;
                	}
                	return tmp;
                }
                
                x.re_m = abs(x_46re)
                real(8) function code(x_46re_m, x_46im)
                    real(8), intent (in) :: x_46re_m
                    real(8), intent (in) :: x_46im
                    real(8) :: tmp
                    if (x_46re_m <= 8.6d+200) then
                        tmp = (-x_46im * x_46im) * x_46im
                    else
                        tmp = (x_46im * x_46im) * x_46im
                    end if
                    code = tmp
                end function
                
                x.re_m = Math.abs(x_46_re);
                public static double code(double x_46_re_m, double x_46_im) {
                	double tmp;
                	if (x_46_re_m <= 8.6e+200) {
                		tmp = (-x_46_im * x_46_im) * x_46_im;
                	} else {
                		tmp = (x_46_im * x_46_im) * x_46_im;
                	}
                	return tmp;
                }
                
                x.re_m = math.fabs(x_46_re)
                def code(x_46_re_m, x_46_im):
                	tmp = 0
                	if x_46_re_m <= 8.6e+200:
                		tmp = (-x_46_im * x_46_im) * x_46_im
                	else:
                		tmp = (x_46_im * x_46_im) * x_46_im
                	return tmp
                
                x.re_m = abs(x_46_re)
                function code(x_46_re_m, x_46_im)
                	tmp = 0.0
                	if (x_46_re_m <= 8.6e+200)
                		tmp = Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im);
                	else
                		tmp = Float64(Float64(x_46_im * x_46_im) * x_46_im);
                	end
                	return tmp
                end
                
                x.re_m = abs(x_46_re);
                function tmp_2 = code(x_46_re_m, x_46_im)
                	tmp = 0.0;
                	if (x_46_re_m <= 8.6e+200)
                		tmp = (-x_46_im * x_46_im) * x_46_im;
                	else
                		tmp = (x_46_im * x_46_im) * x_46_im;
                	end
                	tmp_2 = tmp;
                end
                
                x.re_m = N[Abs[x$46$re], $MachinePrecision]
                code[x$46$re$95$m_, x$46$im_] := If[LessEqual[x$46$re$95$m, 8.6e+200], N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision], N[(N[(x$46$im * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]]
                
                \begin{array}{l}
                x.re_m = \left|x.re\right|
                
                \\
                \begin{array}{l}
                \mathbf{if}\;x.re\_m \leq 8.6 \cdot 10^{+200}:\\
                \;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\
                
                \mathbf{else}:\\
                \;\;\;\;\left(x.im \cdot x.im\right) \cdot x.im\\
                
                
                \end{array}
                \end{array}
                
                Derivation
                1. Split input into 2 regimes
                2. if x.re < 8.60000000000000062e200

                  1. Initial program 82.8%

                    \[\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. Add Preprocessing
                  3. Taylor expanded in x.re around 0

                    \[\leadsto \color{blue}{-1 \cdot {x.im}^{3}} \]
                  4. Step-by-step derivation
                    1. mul-1-negN/A

                      \[\leadsto \color{blue}{\mathsf{neg}\left({x.im}^{3}\right)} \]
                    2. cube-neg-revN/A

                      \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
                    3. lower-pow.f64N/A

                      \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
                    4. lower-neg.f6459.5

                      \[\leadsto {\color{blue}{\left(-x.im\right)}}^{3} \]
                  5. Applied rewrites59.5%

                    \[\leadsto \color{blue}{{\left(-x.im\right)}^{3}} \]
                  6. Step-by-step derivation
                    1. Applied rewrites59.4%

                      \[\leadsto \left(\left(-x.im\right) \cdot x.im\right) \cdot \color{blue}{x.im} \]

                    if 8.60000000000000062e200 < x.re

                    1. Initial program 72.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. Add Preprocessing
                    3. Taylor expanded in x.re around 0

                      \[\leadsto \color{blue}{-1 \cdot {x.im}^{3}} \]
                    4. Step-by-step derivation
                      1. mul-1-negN/A

                        \[\leadsto \color{blue}{\mathsf{neg}\left({x.im}^{3}\right)} \]
                      2. cube-neg-revN/A

                        \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
                      3. lower-pow.f64N/A

                        \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
                      4. lower-neg.f6411.9

                        \[\leadsto {\color{blue}{\left(-x.im\right)}}^{3} \]
                    5. Applied rewrites11.9%

                      \[\leadsto \color{blue}{{\left(-x.im\right)}^{3}} \]
                    6. Step-by-step derivation
                      1. Applied rewrites18.6%

                        \[\leadsto \left(x.im \cdot x.im\right) \cdot \color{blue}{x.im} \]
                    7. Recombined 2 regimes into one program.
                    8. Add Preprocessing

                    Alternative 8: 21.2% accurate, 3.6× speedup?

                    \[\begin{array}{l} x.re_m = \left|x.re\right| \\ \left(x.im \cdot x.im\right) \cdot x.im \end{array} \]
                    x.re_m = (fabs.f64 x.re)
                    (FPCore (x.re_m x.im) :precision binary64 (* (* x.im x.im) x.im))
                    x.re_m = fabs(x_46_re);
                    double code(double x_46_re_m, double x_46_im) {
                    	return (x_46_im * x_46_im) * x_46_im;
                    }
                    
                    x.re_m = abs(x_46re)
                    real(8) function code(x_46re_m, x_46im)
                        real(8), intent (in) :: x_46re_m
                        real(8), intent (in) :: x_46im
                        code = (x_46im * x_46im) * x_46im
                    end function
                    
                    x.re_m = Math.abs(x_46_re);
                    public static double code(double x_46_re_m, double x_46_im) {
                    	return (x_46_im * x_46_im) * x_46_im;
                    }
                    
                    x.re_m = math.fabs(x_46_re)
                    def code(x_46_re_m, x_46_im):
                    	return (x_46_im * x_46_im) * x_46_im
                    
                    x.re_m = abs(x_46_re)
                    function code(x_46_re_m, x_46_im)
                    	return Float64(Float64(x_46_im * x_46_im) * x_46_im)
                    end
                    
                    x.re_m = abs(x_46_re);
                    function tmp = code(x_46_re_m, x_46_im)
                    	tmp = (x_46_im * x_46_im) * x_46_im;
                    end
                    
                    x.re_m = N[Abs[x$46$re], $MachinePrecision]
                    code[x$46$re$95$m_, x$46$im_] := N[(N[(x$46$im * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]
                    
                    \begin{array}{l}
                    x.re_m = \left|x.re\right|
                    
                    \\
                    \left(x.im \cdot x.im\right) \cdot x.im
                    \end{array}
                    
                    Derivation
                    1. Initial program 82.1%

                      \[\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. Add Preprocessing
                    3. Taylor expanded in x.re around 0

                      \[\leadsto \color{blue}{-1 \cdot {x.im}^{3}} \]
                    4. Step-by-step derivation
                      1. mul-1-negN/A

                        \[\leadsto \color{blue}{\mathsf{neg}\left({x.im}^{3}\right)} \]
                      2. cube-neg-revN/A

                        \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
                      3. lower-pow.f64N/A

                        \[\leadsto \color{blue}{{\left(\mathsf{neg}\left(x.im\right)\right)}^{3}} \]
                      4. lower-neg.f6456.2

                        \[\leadsto {\color{blue}{\left(-x.im\right)}}^{3} \]
                    5. Applied rewrites56.2%

                      \[\leadsto \color{blue}{{\left(-x.im\right)}^{3}} \]
                    6. Step-by-step derivation
                      1. Applied rewrites17.2%

                        \[\leadsto \left(x.im \cdot x.im\right) \cdot \color{blue}{x.im} \]
                      2. Add Preprocessing

                      Developer Target 1: 91.5% accurate, 1.1× speedup?

                      \[\begin{array}{l} \\ \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) \end{array} \]
                      (FPCore (x.re x.im)
                       :precision binary64
                       (+ (* (* x.re x.im) (* 2.0 x.re)) (* (* x.im (- x.re x.im)) (+ x.re x.im))))
                      double code(double x_46_re, double x_46_im) {
                      	return ((x_46_re * x_46_im) * (2.0 * x_46_re)) + ((x_46_im * (x_46_re - x_46_im)) * (x_46_re + x_46_im));
                      }
                      
                      real(8) function code(x_46re, x_46im)
                          real(8), intent (in) :: x_46re
                          real(8), intent (in) :: x_46im
                          code = ((x_46re * x_46im) * (2.0d0 * x_46re)) + ((x_46im * (x_46re - x_46im)) * (x_46re + x_46im))
                      end function
                      
                      public static double code(double x_46_re, double x_46_im) {
                      	return ((x_46_re * x_46_im) * (2.0 * x_46_re)) + ((x_46_im * (x_46_re - x_46_im)) * (x_46_re + x_46_im));
                      }
                      
                      def code(x_46_re, x_46_im):
                      	return ((x_46_re * x_46_im) * (2.0 * x_46_re)) + ((x_46_im * (x_46_re - x_46_im)) * (x_46_re + x_46_im))
                      
                      function code(x_46_re, x_46_im)
                      	return Float64(Float64(Float64(x_46_re * x_46_im) * Float64(2.0 * x_46_re)) + Float64(Float64(x_46_im * Float64(x_46_re - x_46_im)) * Float64(x_46_re + x_46_im)))
                      end
                      
                      function tmp = code(x_46_re, x_46_im)
                      	tmp = ((x_46_re * x_46_im) * (2.0 * x_46_re)) + ((x_46_im * (x_46_re - x_46_im)) * (x_46_re + x_46_im));
                      end
                      
                      code[x$46$re_, x$46$im_] := N[(N[(N[(x$46$re * x$46$im), $MachinePrecision] * N[(2.0 * x$46$re), $MachinePrecision]), $MachinePrecision] + N[(N[(x$46$im * N[(x$46$re - x$46$im), $MachinePrecision]), $MachinePrecision] * N[(x$46$re + x$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
                      
                      \begin{array}{l}
                      
                      \\
                      \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)
                      \end{array}
                      

                      Reproduce

                      ?
                      herbie shell --seed 2024344 
                      (FPCore (x.re x.im)
                        :name "math.cube on complex, imaginary part"
                        :precision binary64
                      
                        :alt
                        (! :herbie-platform default (+ (* (* x.re x.im) (* 2 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)))