math.cube on complex, imaginary part

Percentage Accurate: 82.8% → 99.7%
Time: 6.1s
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);
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(x_46re, x_46im)
use fmin_fmax_functions
    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.8% 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);
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(x_46re, x_46im)
use fmin_fmax_functions
    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.7% accurate, 0.4× speedup?

\[\begin{array}{l} x.im\_m = \left|x.im\right| \\ x.im\_s = \mathsf{copysign}\left(1, x.im\right) \\ \begin{array}{l} t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m\\ t_1 := t\_0 + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\ x.im\_s \cdot \begin{array}{l} \mathbf{if}\;t\_1 \leq 10^{+281}:\\ \;\;\;\;t\_0 + \left(x.re \cdot \left(x.im\_m + x.im\_m\right)\right) \cdot x.re\\ \mathbf{elif}\;t\_1 \leq \infty:\\ \;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\ \mathbf{else}:\\ \;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\ \end{array} \end{array} \end{array} \]
x.im\_m = (fabs.f64 x.im)
x.im\_s = (copysign.f64 #s(literal 1 binary64) x.im)
(FPCore (x.im_s x.re x.im_m)
 :precision binary64
 (let* ((t_0 (* (- (* x.re x.re) (* x.im_m x.im_m)) x.im_m))
        (t_1 (+ t_0 (* (+ (* x.re x.im_m) (* x.im_m x.re)) x.re))))
   (*
    x.im_s
    (if (<= t_1 1e+281)
      (+ t_0 (* (* x.re (+ x.im_m x.im_m)) x.re))
      (if (<= t_1 INFINITY)
        (* 3.0 (* (* x.re x.im_m) x.re))
        (* x.im_m (fma (+ x.re x.im_m) (- x.re x.im_m) 2.0)))))))
x.im\_m = fabs(x_46_im);
x.im\_s = copysign(1.0, x_46_im);
double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
	double t_0 = ((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m;
	double t_1 = t_0 + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
	double tmp;
	if (t_1 <= 1e+281) {
		tmp = t_0 + ((x_46_re * (x_46_im_m + x_46_im_m)) * x_46_re);
	} else if (t_1 <= ((double) INFINITY)) {
		tmp = 3.0 * ((x_46_re * x_46_im_m) * x_46_re);
	} else {
		tmp = x_46_im_m * fma((x_46_re + x_46_im_m), (x_46_re - x_46_im_m), 2.0);
	}
	return x_46_im_s * tmp;
}
x.im\_m = abs(x_46_im)
x.im\_s = copysign(1.0, x_46_im)
function code(x_46_im_s, x_46_re, x_46_im_m)
	t_0 = Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im_m * x_46_im_m)) * x_46_im_m)
	t_1 = Float64(t_0 + Float64(Float64(Float64(x_46_re * x_46_im_m) + Float64(x_46_im_m * x_46_re)) * x_46_re))
	tmp = 0.0
	if (t_1 <= 1e+281)
		tmp = Float64(t_0 + Float64(Float64(x_46_re * Float64(x_46_im_m + x_46_im_m)) * x_46_re));
	elseif (t_1 <= Inf)
		tmp = Float64(3.0 * Float64(Float64(x_46_re * x_46_im_m) * x_46_re));
	else
		tmp = Float64(x_46_im_m * fma(Float64(x_46_re + x_46_im_m), Float64(x_46_re - x_46_im_m), 2.0));
	end
	return Float64(x_46_im_s * tmp)
end
x.im\_m = N[Abs[x$46$im], $MachinePrecision]
x.im\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x$46$im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[x$46$im$95$s_, x$46$re_, x$46$im$95$m_] := Block[{t$95$0 = N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im$95$m * x$46$im$95$m), $MachinePrecision]), $MachinePrecision] * x$46$im$95$m), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] + N[(x$46$im$95$m * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]}, N[(x$46$im$95$s * If[LessEqual[t$95$1, 1e+281], N[(t$95$0 + N[(N[(x$46$re * N[(x$46$im$95$m + x$46$im$95$m), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, Infinity], N[(3.0 * N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision], N[(x$46$im$95$m * N[(N[(x$46$re + x$46$im$95$m), $MachinePrecision] * N[(x$46$re - x$46$im$95$m), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]
\begin{array}{l}
x.im\_m = \left|x.im\right|
\\
x.im\_s = \mathsf{copysign}\left(1, x.im\right)

\\
\begin{array}{l}
t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m\\
t_1 := t\_0 + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\
x.im\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq 10^{+281}:\\
\;\;\;\;t\_0 + \left(x.re \cdot \left(x.im\_m + x.im\_m\right)\right) \cdot x.re\\

\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\

\mathbf{else}:\\
\;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\


\end{array}
\end{array}
\end{array}
Derivation
  1. Split input into 3 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)) < 1e281

    1. Initial program 97.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. Step-by-step derivation
      1. lift-+.f64N/A

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

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

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

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

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

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

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

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

    if 1e281 < (+.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 84.2%

      \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
    2. 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. Applied rewrites63.1%

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

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

        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--.f6425.9

            \[\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 rewrites25.9%

          \[\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. 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 \]
          3. *-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 \]
          4. lift-*.f64N/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 \]
          5. associate-*l*N/A

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

            \[\leadsto \left(x.re - x.im\right) \cdot \left(x.im \cdot \color{blue}{\left(x.im + x.re\right)}\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
          7. distribute-rgt-outN/A

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

            \[\leadsto \color{blue}{\mathsf{fma}\left(x.re - x.im, x.im \cdot x.im + x.re \cdot x.im, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right)} \]
          9. distribute-rgt-outN/A

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

            \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.im + x.re\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
          11. lower-*.f6425.9

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

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

            \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.re + x.im\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
          14. lower-+.f6425.9

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

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

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

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

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

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

            \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \left(x.re + x.im\right), x.re \cdot \left(x.re \cdot x.im + \color{blue}{x.re \cdot x.im}\right)\right) \]
          21. distribute-lft-inN/A

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

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

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

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

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

          \[\leadsto \color{blue}{x.im \cdot \mathsf{fma}\left(x.re + x.im, x.re - x.im, 2\right)} \]
      3. Recombined 3 regimes into one program.
      4. Add Preprocessing

      Alternative 2: 99.7% accurate, 0.4× speedup?

      \[\begin{array}{l} x.im\_m = \left|x.im\right| \\ x.im\_s = \mathsf{copysign}\left(1, x.im\right) \\ \begin{array}{l} t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\ x.im\_s \cdot \begin{array}{l} \mathbf{if}\;t\_0 \leq 2 \cdot 10^{+65}:\\ \;\;\;\;\mathsf{fma}\left(\left(x.re \cdot x.re\right) \cdot 3, x.im\_m, \left(\left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\right)\\ \mathbf{elif}\;t\_0 \leq \infty:\\ \;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\ \mathbf{else}:\\ \;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\ \end{array} \end{array} \end{array} \]
      x.im\_m = (fabs.f64 x.im)
      x.im\_s = (copysign.f64 #s(literal 1 binary64) x.im)
      (FPCore (x.im_s x.re x.im_m)
       :precision binary64
       (let* ((t_0
               (+
                (* (- (* x.re x.re) (* x.im_m x.im_m)) x.im_m)
                (* (+ (* x.re x.im_m) (* x.im_m x.re)) x.re))))
         (*
          x.im_s
          (if (<= t_0 2e+65)
            (fma (* (* x.re x.re) 3.0) x.im_m (* (* (- x.im_m) x.im_m) x.im_m))
            (if (<= t_0 INFINITY)
              (* 3.0 (* (* x.re x.im_m) x.re))
              (* x.im_m (fma (+ x.re x.im_m) (- x.re x.im_m) 2.0)))))))
      x.im\_m = fabs(x_46_im);
      x.im\_s = copysign(1.0, x_46_im);
      double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
      	double t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
      	double tmp;
      	if (t_0 <= 2e+65) {
      		tmp = fma(((x_46_re * x_46_re) * 3.0), x_46_im_m, ((-x_46_im_m * x_46_im_m) * x_46_im_m));
      	} else if (t_0 <= ((double) INFINITY)) {
      		tmp = 3.0 * ((x_46_re * x_46_im_m) * x_46_re);
      	} else {
      		tmp = x_46_im_m * fma((x_46_re + x_46_im_m), (x_46_re - x_46_im_m), 2.0);
      	}
      	return x_46_im_s * tmp;
      }
      
      x.im\_m = abs(x_46_im)
      x.im\_s = copysign(1.0, x_46_im)
      function code(x_46_im_s, x_46_re, x_46_im_m)
      	t_0 = Float64(Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im_m * x_46_im_m)) * x_46_im_m) + Float64(Float64(Float64(x_46_re * x_46_im_m) + Float64(x_46_im_m * x_46_re)) * x_46_re))
      	tmp = 0.0
      	if (t_0 <= 2e+65)
      		tmp = fma(Float64(Float64(x_46_re * x_46_re) * 3.0), x_46_im_m, Float64(Float64(Float64(-x_46_im_m) * x_46_im_m) * x_46_im_m));
      	elseif (t_0 <= Inf)
      		tmp = Float64(3.0 * Float64(Float64(x_46_re * x_46_im_m) * x_46_re));
      	else
      		tmp = Float64(x_46_im_m * fma(Float64(x_46_re + x_46_im_m), Float64(x_46_re - x_46_im_m), 2.0));
      	end
      	return Float64(x_46_im_s * tmp)
      end
      
      x.im\_m = N[Abs[x$46$im], $MachinePrecision]
      x.im\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x$46$im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
      code[x$46$im$95$s_, x$46$re_, x$46$im$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im$95$m * x$46$im$95$m), $MachinePrecision]), $MachinePrecision] * x$46$im$95$m), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] + N[(x$46$im$95$m * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]}, N[(x$46$im$95$s * If[LessEqual[t$95$0, 2e+65], N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] * 3.0), $MachinePrecision] * x$46$im$95$m + N[(N[((-x$46$im$95$m) * x$46$im$95$m), $MachinePrecision] * x$46$im$95$m), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, Infinity], N[(3.0 * N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision], N[(x$46$im$95$m * N[(N[(x$46$re + x$46$im$95$m), $MachinePrecision] * N[(x$46$re - x$46$im$95$m), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]
      
      \begin{array}{l}
      x.im\_m = \left|x.im\right|
      \\
      x.im\_s = \mathsf{copysign}\left(1, x.im\right)
      
      \\
      \begin{array}{l}
      t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\
      x.im\_s \cdot \begin{array}{l}
      \mathbf{if}\;t\_0 \leq 2 \cdot 10^{+65}:\\
      \;\;\;\;\mathsf{fma}\left(\left(x.re \cdot x.re\right) \cdot 3, x.im\_m, \left(\left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\right)\\
      
      \mathbf{elif}\;t\_0 \leq \infty:\\
      \;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\
      
      \mathbf{else}:\\
      \;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\
      
      
      \end{array}
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 3 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)) < 2e65

        1. Initial program 96.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} + {x.re}^{2} \cdot \left(x.im + 2 \cdot x.im\right)} \]
        4. Step-by-step derivation
          1. Applied rewrites96.7%

            \[\leadsto \color{blue}{\mathsf{fma}\left(3 \cdot x.re, x.re, \left(-x.im\right) \cdot x.im\right) \cdot x.im} \]
          2. Step-by-step derivation
            1. Applied rewrites93.5%

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

            if 2e65 < (+.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 88.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 inf

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

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

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

                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--.f6425.9

                    \[\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 rewrites25.9%

                  \[\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. 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 \]
                  3. *-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 \]
                  4. lift-*.f64N/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 \]
                  5. associate-*l*N/A

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

                    \[\leadsto \left(x.re - x.im\right) \cdot \left(x.im \cdot \color{blue}{\left(x.im + x.re\right)}\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                  7. distribute-rgt-outN/A

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

                    \[\leadsto \color{blue}{\mathsf{fma}\left(x.re - x.im, x.im \cdot x.im + x.re \cdot x.im, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right)} \]
                  9. distribute-rgt-outN/A

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

                    \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.im + x.re\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                  11. lower-*.f6425.9

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

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

                    \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.re + x.im\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                  14. lower-+.f6425.9

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

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

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

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

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

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

                    \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \left(x.re + x.im\right), x.re \cdot \left(x.re \cdot x.im + \color{blue}{x.re \cdot x.im}\right)\right) \]
                  21. distribute-lft-inN/A

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

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

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

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

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

                  \[\leadsto \color{blue}{x.im \cdot \mathsf{fma}\left(x.re + x.im, x.re - x.im, 2\right)} \]
              3. Recombined 3 regimes into one program.
              4. Add Preprocessing

              Alternative 3: 99.7% accurate, 0.4× speedup?

              \[\begin{array}{l} x.im\_m = \left|x.im\right| \\ x.im\_s = \mathsf{copysign}\left(1, x.im\right) \\ \begin{array}{l} t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\ x.im\_s \cdot \begin{array}{l} \mathbf{if}\;t\_0 \leq 2 \cdot 10^{+65}:\\ \;\;\;\;\mathsf{fma}\left(3 \cdot x.re, x.re, \left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\\ \mathbf{elif}\;t\_0 \leq \infty:\\ \;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\ \mathbf{else}:\\ \;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\ \end{array} \end{array} \end{array} \]
              x.im\_m = (fabs.f64 x.im)
              x.im\_s = (copysign.f64 #s(literal 1 binary64) x.im)
              (FPCore (x.im_s x.re x.im_m)
               :precision binary64
               (let* ((t_0
                       (+
                        (* (- (* x.re x.re) (* x.im_m x.im_m)) x.im_m)
                        (* (+ (* x.re x.im_m) (* x.im_m x.re)) x.re))))
                 (*
                  x.im_s
                  (if (<= t_0 2e+65)
                    (* (fma (* 3.0 x.re) x.re (* (- x.im_m) x.im_m)) x.im_m)
                    (if (<= t_0 INFINITY)
                      (* 3.0 (* (* x.re x.im_m) x.re))
                      (* x.im_m (fma (+ x.re x.im_m) (- x.re x.im_m) 2.0)))))))
              x.im\_m = fabs(x_46_im);
              x.im\_s = copysign(1.0, x_46_im);
              double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
              	double t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
              	double tmp;
              	if (t_0 <= 2e+65) {
              		tmp = fma((3.0 * x_46_re), x_46_re, (-x_46_im_m * x_46_im_m)) * x_46_im_m;
              	} else if (t_0 <= ((double) INFINITY)) {
              		tmp = 3.0 * ((x_46_re * x_46_im_m) * x_46_re);
              	} else {
              		tmp = x_46_im_m * fma((x_46_re + x_46_im_m), (x_46_re - x_46_im_m), 2.0);
              	}
              	return x_46_im_s * tmp;
              }
              
              x.im\_m = abs(x_46_im)
              x.im\_s = copysign(1.0, x_46_im)
              function code(x_46_im_s, x_46_re, x_46_im_m)
              	t_0 = Float64(Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im_m * x_46_im_m)) * x_46_im_m) + Float64(Float64(Float64(x_46_re * x_46_im_m) + Float64(x_46_im_m * x_46_re)) * x_46_re))
              	tmp = 0.0
              	if (t_0 <= 2e+65)
              		tmp = Float64(fma(Float64(3.0 * x_46_re), x_46_re, Float64(Float64(-x_46_im_m) * x_46_im_m)) * x_46_im_m);
              	elseif (t_0 <= Inf)
              		tmp = Float64(3.0 * Float64(Float64(x_46_re * x_46_im_m) * x_46_re));
              	else
              		tmp = Float64(x_46_im_m * fma(Float64(x_46_re + x_46_im_m), Float64(x_46_re - x_46_im_m), 2.0));
              	end
              	return Float64(x_46_im_s * tmp)
              end
              
              x.im\_m = N[Abs[x$46$im], $MachinePrecision]
              x.im\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x$46$im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
              code[x$46$im$95$s_, x$46$re_, x$46$im$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im$95$m * x$46$im$95$m), $MachinePrecision]), $MachinePrecision] * x$46$im$95$m), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] + N[(x$46$im$95$m * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]}, N[(x$46$im$95$s * If[LessEqual[t$95$0, 2e+65], N[(N[(N[(3.0 * x$46$re), $MachinePrecision] * x$46$re + N[((-x$46$im$95$m) * x$46$im$95$m), $MachinePrecision]), $MachinePrecision] * x$46$im$95$m), $MachinePrecision], If[LessEqual[t$95$0, Infinity], N[(3.0 * N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision], N[(x$46$im$95$m * N[(N[(x$46$re + x$46$im$95$m), $MachinePrecision] * N[(x$46$re - x$46$im$95$m), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]
              
              \begin{array}{l}
              x.im\_m = \left|x.im\right|
              \\
              x.im\_s = \mathsf{copysign}\left(1, x.im\right)
              
              \\
              \begin{array}{l}
              t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\
              x.im\_s \cdot \begin{array}{l}
              \mathbf{if}\;t\_0 \leq 2 \cdot 10^{+65}:\\
              \;\;\;\;\mathsf{fma}\left(3 \cdot x.re, x.re, \left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\\
              
              \mathbf{elif}\;t\_0 \leq \infty:\\
              \;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\
              
              \mathbf{else}:\\
              \;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\
              
              
              \end{array}
              \end{array}
              \end{array}
              
              Derivation
              1. Split input into 3 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)) < 2e65

                1. Initial program 96.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} + {x.re}^{2} \cdot \left(x.im + 2 \cdot x.im\right)} \]
                4. Step-by-step derivation
                  1. Applied rewrites96.7%

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

                  if 2e65 < (+.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 88.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 inf

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

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

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

                      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--.f6425.9

                          \[\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 rewrites25.9%

                        \[\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. 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 \]
                        3. *-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 \]
                        4. lift-*.f64N/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 \]
                        5. associate-*l*N/A

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

                          \[\leadsto \left(x.re - x.im\right) \cdot \left(x.im \cdot \color{blue}{\left(x.im + x.re\right)}\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                        7. distribute-rgt-outN/A

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

                          \[\leadsto \color{blue}{\mathsf{fma}\left(x.re - x.im, x.im \cdot x.im + x.re \cdot x.im, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right)} \]
                        9. distribute-rgt-outN/A

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

                          \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.im + x.re\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                        11. lower-*.f6425.9

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

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

                          \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.re + x.im\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                        14. lower-+.f6425.9

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

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

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

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

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

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

                          \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \left(x.re + x.im\right), x.re \cdot \left(x.re \cdot x.im + \color{blue}{x.re \cdot x.im}\right)\right) \]
                        21. distribute-lft-inN/A

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

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

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

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

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

                        \[\leadsto \color{blue}{x.im \cdot \mathsf{fma}\left(x.re + x.im, x.re - x.im, 2\right)} \]
                    3. Recombined 3 regimes into one program.
                    4. Add Preprocessing

                    Alternative 4: 99.0% accurate, 0.4× speedup?

                    \[\begin{array}{l} x.im\_m = \left|x.im\right| \\ x.im\_s = \mathsf{copysign}\left(1, x.im\right) \\ \begin{array}{l} t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\ x.im\_s \cdot \begin{array}{l} \mathbf{if}\;t\_0 \leq -5 \cdot 10^{-292}:\\ \;\;\;\;\left(\left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\\ \mathbf{elif}\;t\_0 \leq \infty:\\ \;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\ \mathbf{else}:\\ \;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\ \end{array} \end{array} \end{array} \]
                    x.im\_m = (fabs.f64 x.im)
                    x.im\_s = (copysign.f64 #s(literal 1 binary64) x.im)
                    (FPCore (x.im_s x.re x.im_m)
                     :precision binary64
                     (let* ((t_0
                             (+
                              (* (- (* x.re x.re) (* x.im_m x.im_m)) x.im_m)
                              (* (+ (* x.re x.im_m) (* x.im_m x.re)) x.re))))
                       (*
                        x.im_s
                        (if (<= t_0 -5e-292)
                          (* (* (- x.im_m) x.im_m) x.im_m)
                          (if (<= t_0 INFINITY)
                            (* 3.0 (* (* x.re x.im_m) x.re))
                            (* x.im_m (fma (+ x.re x.im_m) (- x.re x.im_m) 2.0)))))))
                    x.im\_m = fabs(x_46_im);
                    x.im\_s = copysign(1.0, x_46_im);
                    double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
                    	double t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
                    	double tmp;
                    	if (t_0 <= -5e-292) {
                    		tmp = (-x_46_im_m * x_46_im_m) * x_46_im_m;
                    	} else if (t_0 <= ((double) INFINITY)) {
                    		tmp = 3.0 * ((x_46_re * x_46_im_m) * x_46_re);
                    	} else {
                    		tmp = x_46_im_m * fma((x_46_re + x_46_im_m), (x_46_re - x_46_im_m), 2.0);
                    	}
                    	return x_46_im_s * tmp;
                    }
                    
                    x.im\_m = abs(x_46_im)
                    x.im\_s = copysign(1.0, x_46_im)
                    function code(x_46_im_s, x_46_re, x_46_im_m)
                    	t_0 = Float64(Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im_m * x_46_im_m)) * x_46_im_m) + Float64(Float64(Float64(x_46_re * x_46_im_m) + Float64(x_46_im_m * x_46_re)) * x_46_re))
                    	tmp = 0.0
                    	if (t_0 <= -5e-292)
                    		tmp = Float64(Float64(Float64(-x_46_im_m) * x_46_im_m) * x_46_im_m);
                    	elseif (t_0 <= Inf)
                    		tmp = Float64(3.0 * Float64(Float64(x_46_re * x_46_im_m) * x_46_re));
                    	else
                    		tmp = Float64(x_46_im_m * fma(Float64(x_46_re + x_46_im_m), Float64(x_46_re - x_46_im_m), 2.0));
                    	end
                    	return Float64(x_46_im_s * tmp)
                    end
                    
                    x.im\_m = N[Abs[x$46$im], $MachinePrecision]
                    x.im\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x$46$im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                    code[x$46$im$95$s_, x$46$re_, x$46$im$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im$95$m * x$46$im$95$m), $MachinePrecision]), $MachinePrecision] * x$46$im$95$m), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] + N[(x$46$im$95$m * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]}, N[(x$46$im$95$s * If[LessEqual[t$95$0, -5e-292], N[(N[((-x$46$im$95$m) * x$46$im$95$m), $MachinePrecision] * x$46$im$95$m), $MachinePrecision], If[LessEqual[t$95$0, Infinity], N[(3.0 * N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision], N[(x$46$im$95$m * N[(N[(x$46$re + x$46$im$95$m), $MachinePrecision] * N[(x$46$re - x$46$im$95$m), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]
                    
                    \begin{array}{l}
                    x.im\_m = \left|x.im\right|
                    \\
                    x.im\_s = \mathsf{copysign}\left(1, x.im\right)
                    
                    \\
                    \begin{array}{l}
                    t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\
                    x.im\_s \cdot \begin{array}{l}
                    \mathbf{if}\;t\_0 \leq -5 \cdot 10^{-292}:\\
                    \;\;\;\;\left(\left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\\
                    
                    \mathbf{elif}\;t\_0 \leq \infty:\\
                    \;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\
                    
                    \mathbf{else}:\\
                    \;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\
                    
                    
                    \end{array}
                    \end{array}
                    \end{array}
                    
                    Derivation
                    1. Split input into 3 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)) < -4.99999999999999981e-292

                      1. Initial program 95.2%

                        \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                      2. 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. Applied rewrites95.1%

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

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

                            \[\leadsto \left(\left(-x.im\right) \cdot x.im\right) \cdot x.im \]

                          if -4.99999999999999981e-292 < (+.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 93.2%

                            \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                          2. 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. Applied rewrites72.7%

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

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

                              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--.f6425.9

                                  \[\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 rewrites25.9%

                                \[\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. 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 \]
                                3. *-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 \]
                                4. lift-*.f64N/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 \]
                                5. associate-*l*N/A

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

                                  \[\leadsto \left(x.re - x.im\right) \cdot \left(x.im \cdot \color{blue}{\left(x.im + x.re\right)}\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                                7. distribute-rgt-outN/A

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

                                  \[\leadsto \color{blue}{\mathsf{fma}\left(x.re - x.im, x.im \cdot x.im + x.re \cdot x.im, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right)} \]
                                9. distribute-rgt-outN/A

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

                                  \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.im + x.re\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                                11. lower-*.f6425.9

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

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

                                  \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.re + x.im\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                                14. lower-+.f6425.9

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

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

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

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

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

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

                                  \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \left(x.re + x.im\right), x.re \cdot \left(x.re \cdot x.im + \color{blue}{x.re \cdot x.im}\right)\right) \]
                                21. distribute-lft-inN/A

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

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

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

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

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

                                \[\leadsto \color{blue}{x.im \cdot \mathsf{fma}\left(x.re + x.im, x.re - x.im, 2\right)} \]
                            3. Recombined 3 regimes into one program.
                            4. Add Preprocessing

                            Alternative 5: 95.7% accurate, 0.4× speedup?

                            \[\begin{array}{l} x.im\_m = \left|x.im\right| \\ x.im\_s = \mathsf{copysign}\left(1, x.im\right) \\ \begin{array}{l} t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\ x.im\_s \cdot \begin{array}{l} \mathbf{if}\;t\_0 \leq -5 \cdot 10^{-292} \lor \neg \left(t\_0 \leq \infty\right):\\ \;\;\;\;\left(\left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\\ \mathbf{else}:\\ \;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\ \end{array} \end{array} \end{array} \]
                            x.im\_m = (fabs.f64 x.im)
                            x.im\_s = (copysign.f64 #s(literal 1 binary64) x.im)
                            (FPCore (x.im_s x.re x.im_m)
                             :precision binary64
                             (let* ((t_0
                                     (+
                                      (* (- (* x.re x.re) (* x.im_m x.im_m)) x.im_m)
                                      (* (+ (* x.re x.im_m) (* x.im_m x.re)) x.re))))
                               (*
                                x.im_s
                                (if (or (<= t_0 -5e-292) (not (<= t_0 INFINITY)))
                                  (* (* (- x.im_m) x.im_m) x.im_m)
                                  (* 3.0 (* (* x.re x.im_m) x.re))))))
                            x.im\_m = fabs(x_46_im);
                            x.im\_s = copysign(1.0, x_46_im);
                            double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
                            	double t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
                            	double tmp;
                            	if ((t_0 <= -5e-292) || !(t_0 <= ((double) INFINITY))) {
                            		tmp = (-x_46_im_m * x_46_im_m) * x_46_im_m;
                            	} else {
                            		tmp = 3.0 * ((x_46_re * x_46_im_m) * x_46_re);
                            	}
                            	return x_46_im_s * tmp;
                            }
                            
                            x.im\_m = Math.abs(x_46_im);
                            x.im\_s = Math.copySign(1.0, x_46_im);
                            public static double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
                            	double t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
                            	double tmp;
                            	if ((t_0 <= -5e-292) || !(t_0 <= Double.POSITIVE_INFINITY)) {
                            		tmp = (-x_46_im_m * x_46_im_m) * x_46_im_m;
                            	} else {
                            		tmp = 3.0 * ((x_46_re * x_46_im_m) * x_46_re);
                            	}
                            	return x_46_im_s * tmp;
                            }
                            
                            x.im\_m = math.fabs(x_46_im)
                            x.im\_s = math.copysign(1.0, x_46_im)
                            def code(x_46_im_s, x_46_re, x_46_im_m):
                            	t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re)
                            	tmp = 0
                            	if (t_0 <= -5e-292) or not (t_0 <= math.inf):
                            		tmp = (-x_46_im_m * x_46_im_m) * x_46_im_m
                            	else:
                            		tmp = 3.0 * ((x_46_re * x_46_im_m) * x_46_re)
                            	return x_46_im_s * tmp
                            
                            x.im\_m = abs(x_46_im)
                            x.im\_s = copysign(1.0, x_46_im)
                            function code(x_46_im_s, x_46_re, x_46_im_m)
                            	t_0 = Float64(Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im_m * x_46_im_m)) * x_46_im_m) + Float64(Float64(Float64(x_46_re * x_46_im_m) + Float64(x_46_im_m * x_46_re)) * x_46_re))
                            	tmp = 0.0
                            	if ((t_0 <= -5e-292) || !(t_0 <= Inf))
                            		tmp = Float64(Float64(Float64(-x_46_im_m) * x_46_im_m) * x_46_im_m);
                            	else
                            		tmp = Float64(3.0 * Float64(Float64(x_46_re * x_46_im_m) * x_46_re));
                            	end
                            	return Float64(x_46_im_s * tmp)
                            end
                            
                            x.im\_m = abs(x_46_im);
                            x.im\_s = sign(x_46_im) * abs(1.0);
                            function tmp_2 = code(x_46_im_s, x_46_re, x_46_im_m)
                            	t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
                            	tmp = 0.0;
                            	if ((t_0 <= -5e-292) || ~((t_0 <= Inf)))
                            		tmp = (-x_46_im_m * x_46_im_m) * x_46_im_m;
                            	else
                            		tmp = 3.0 * ((x_46_re * x_46_im_m) * x_46_re);
                            	end
                            	tmp_2 = x_46_im_s * tmp;
                            end
                            
                            x.im\_m = N[Abs[x$46$im], $MachinePrecision]
                            x.im\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x$46$im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                            code[x$46$im$95$s_, x$46$re_, x$46$im$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im$95$m * x$46$im$95$m), $MachinePrecision]), $MachinePrecision] * x$46$im$95$m), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] + N[(x$46$im$95$m * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]}, N[(x$46$im$95$s * If[Or[LessEqual[t$95$0, -5e-292], N[Not[LessEqual[t$95$0, Infinity]], $MachinePrecision]], N[(N[((-x$46$im$95$m) * x$46$im$95$m), $MachinePrecision] * x$46$im$95$m), $MachinePrecision], N[(3.0 * N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]]
                            
                            \begin{array}{l}
                            x.im\_m = \left|x.im\right|
                            \\
                            x.im\_s = \mathsf{copysign}\left(1, x.im\right)
                            
                            \\
                            \begin{array}{l}
                            t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\
                            x.im\_s \cdot \begin{array}{l}
                            \mathbf{if}\;t\_0 \leq -5 \cdot 10^{-292} \lor \neg \left(t\_0 \leq \infty\right):\\
                            \;\;\;\;\left(\left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\\
                            
                            \mathbf{else}:\\
                            \;\;\;\;3 \cdot \left(\left(x.re \cdot x.im\_m\right) \cdot x.re\right)\\
                            
                            
                            \end{array}
                            \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)) < -4.99999999999999981e-292 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 75.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} + {x.re}^{2} \cdot \left(x.im + 2 \cdot x.im\right)} \]
                              4. Step-by-step derivation
                                1. Applied rewrites90.7%

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

                                  \[\leadsto \left(-1 \cdot {x.im}^{2}\right) \cdot x.im \]
                                3. Step-by-step derivation
                                  1. Applied rewrites54.5%

                                    \[\leadsto \left(\left(-x.im\right) \cdot x.im\right) \cdot x.im \]

                                  if -4.99999999999999981e-292 < (+.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 93.2%

                                    \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                                  2. 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. Applied rewrites72.7%

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

                                        \[\leadsto 3 \cdot \color{blue}{\left(\left(x.re \cdot x.im\right) \cdot x.re\right)} \]
                                    3. Recombined 2 regimes into one program.
                                    4. Final simplification63.6%

                                      \[\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 -5 \cdot 10^{-292} \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.re \cdot x.im\right) \cdot x.re\right)\\ \end{array} \]
                                    5. Add Preprocessing

                                    Alternative 6: 75.6% accurate, 0.4× speedup?

                                    \[\begin{array}{l} x.im\_m = \left|x.im\right| \\ x.im\_s = \mathsf{copysign}\left(1, x.im\right) \\ \begin{array}{l} t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\ x.im\_s \cdot \begin{array}{l} \mathbf{if}\;t\_0 \leq -5 \cdot 10^{-292} \lor \neg \left(t\_0 \leq \infty\right):\\ \;\;\;\;\left(\left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\\ \mathbf{else}:\\ \;\;\;\;\left(x.im\_m \cdot x.re\right) \cdot x.re\\ \end{array} \end{array} \end{array} \]
                                    x.im\_m = (fabs.f64 x.im)
                                    x.im\_s = (copysign.f64 #s(literal 1 binary64) x.im)
                                    (FPCore (x.im_s x.re x.im_m)
                                     :precision binary64
                                     (let* ((t_0
                                             (+
                                              (* (- (* x.re x.re) (* x.im_m x.im_m)) x.im_m)
                                              (* (+ (* x.re x.im_m) (* x.im_m x.re)) x.re))))
                                       (*
                                        x.im_s
                                        (if (or (<= t_0 -5e-292) (not (<= t_0 INFINITY)))
                                          (* (* (- x.im_m) x.im_m) x.im_m)
                                          (* (* x.im_m x.re) x.re)))))
                                    x.im\_m = fabs(x_46_im);
                                    x.im\_s = copysign(1.0, x_46_im);
                                    double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
                                    	double t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
                                    	double tmp;
                                    	if ((t_0 <= -5e-292) || !(t_0 <= ((double) INFINITY))) {
                                    		tmp = (-x_46_im_m * x_46_im_m) * x_46_im_m;
                                    	} else {
                                    		tmp = (x_46_im_m * x_46_re) * x_46_re;
                                    	}
                                    	return x_46_im_s * tmp;
                                    }
                                    
                                    x.im\_m = Math.abs(x_46_im);
                                    x.im\_s = Math.copySign(1.0, x_46_im);
                                    public static double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
                                    	double t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
                                    	double tmp;
                                    	if ((t_0 <= -5e-292) || !(t_0 <= Double.POSITIVE_INFINITY)) {
                                    		tmp = (-x_46_im_m * x_46_im_m) * x_46_im_m;
                                    	} else {
                                    		tmp = (x_46_im_m * x_46_re) * x_46_re;
                                    	}
                                    	return x_46_im_s * tmp;
                                    }
                                    
                                    x.im\_m = math.fabs(x_46_im)
                                    x.im\_s = math.copysign(1.0, x_46_im)
                                    def code(x_46_im_s, x_46_re, x_46_im_m):
                                    	t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re)
                                    	tmp = 0
                                    	if (t_0 <= -5e-292) or not (t_0 <= math.inf):
                                    		tmp = (-x_46_im_m * x_46_im_m) * x_46_im_m
                                    	else:
                                    		tmp = (x_46_im_m * x_46_re) * x_46_re
                                    	return x_46_im_s * tmp
                                    
                                    x.im\_m = abs(x_46_im)
                                    x.im\_s = copysign(1.0, x_46_im)
                                    function code(x_46_im_s, x_46_re, x_46_im_m)
                                    	t_0 = Float64(Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im_m * x_46_im_m)) * x_46_im_m) + Float64(Float64(Float64(x_46_re * x_46_im_m) + Float64(x_46_im_m * x_46_re)) * x_46_re))
                                    	tmp = 0.0
                                    	if ((t_0 <= -5e-292) || !(t_0 <= Inf))
                                    		tmp = Float64(Float64(Float64(-x_46_im_m) * x_46_im_m) * x_46_im_m);
                                    	else
                                    		tmp = Float64(Float64(x_46_im_m * x_46_re) * x_46_re);
                                    	end
                                    	return Float64(x_46_im_s * tmp)
                                    end
                                    
                                    x.im\_m = abs(x_46_im);
                                    x.im\_s = sign(x_46_im) * abs(1.0);
                                    function tmp_2 = code(x_46_im_s, x_46_re, x_46_im_m)
                                    	t_0 = (((x_46_re * x_46_re) - (x_46_im_m * x_46_im_m)) * x_46_im_m) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
                                    	tmp = 0.0;
                                    	if ((t_0 <= -5e-292) || ~((t_0 <= Inf)))
                                    		tmp = (-x_46_im_m * x_46_im_m) * x_46_im_m;
                                    	else
                                    		tmp = (x_46_im_m * x_46_re) * x_46_re;
                                    	end
                                    	tmp_2 = x_46_im_s * tmp;
                                    end
                                    
                                    x.im\_m = N[Abs[x$46$im], $MachinePrecision]
                                    x.im\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x$46$im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                                    code[x$46$im$95$s_, x$46$re_, x$46$im$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im$95$m * x$46$im$95$m), $MachinePrecision]), $MachinePrecision] * x$46$im$95$m), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] + N[(x$46$im$95$m * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]}, N[(x$46$im$95$s * If[Or[LessEqual[t$95$0, -5e-292], N[Not[LessEqual[t$95$0, Infinity]], $MachinePrecision]], N[(N[((-x$46$im$95$m) * x$46$im$95$m), $MachinePrecision] * x$46$im$95$m), $MachinePrecision], N[(N[(x$46$im$95$m * x$46$re), $MachinePrecision] * x$46$re), $MachinePrecision]]), $MachinePrecision]]
                                    
                                    \begin{array}{l}
                                    x.im\_m = \left|x.im\right|
                                    \\
                                    x.im\_s = \mathsf{copysign}\left(1, x.im\right)
                                    
                                    \\
                                    \begin{array}{l}
                                    t_0 := \left(x.re \cdot x.re - x.im\_m \cdot x.im\_m\right) \cdot x.im\_m + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\
                                    x.im\_s \cdot \begin{array}{l}
                                    \mathbf{if}\;t\_0 \leq -5 \cdot 10^{-292} \lor \neg \left(t\_0 \leq \infty\right):\\
                                    \;\;\;\;\left(\left(-x.im\_m\right) \cdot x.im\_m\right) \cdot x.im\_m\\
                                    
                                    \mathbf{else}:\\
                                    \;\;\;\;\left(x.im\_m \cdot x.re\right) \cdot x.re\\
                                    
                                    
                                    \end{array}
                                    \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)) < -4.99999999999999981e-292 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 75.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} + {x.re}^{2} \cdot \left(x.im + 2 \cdot x.im\right)} \]
                                      4. Step-by-step derivation
                                        1. Applied rewrites90.7%

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

                                          \[\leadsto \left(-1 \cdot {x.im}^{2}\right) \cdot x.im \]
                                        3. Step-by-step derivation
                                          1. Applied rewrites54.5%

                                            \[\leadsto \left(\left(-x.im\right) \cdot x.im\right) \cdot x.im \]

                                          if -4.99999999999999981e-292 < (+.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 93.2%

                                            \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                                          2. 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.8

                                              \[\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.8%

                                            \[\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. 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 \]
                                            3. *-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 \]
                                            4. lift-*.f64N/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 \]
                                            5. associate-*l*N/A

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

                                              \[\leadsto \left(x.re - x.im\right) \cdot \left(x.im \cdot \color{blue}{\left(x.im + x.re\right)}\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                                            7. distribute-rgt-outN/A

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

                                              \[\leadsto \color{blue}{\mathsf{fma}\left(x.re - x.im, x.im \cdot x.im + x.re \cdot x.im, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right)} \]
                                            9. distribute-rgt-outN/A

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

                                              \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.im + x.re\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                                            11. lower-*.f6499.8

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

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

                                              \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.re + x.im\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                                            14. lower-+.f6499.8

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

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

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

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

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

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

                                              \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \left(x.re + x.im\right), x.re \cdot \left(x.re \cdot x.im + \color{blue}{x.re \cdot x.im}\right)\right) \]
                                            21. distribute-lft-inN/A

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

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

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

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

                                            \[\leadsto \color{blue}{x.im \cdot {x.re}^{2}} \]
                                          8. Step-by-step derivation
                                            1. Applied rewrites43.4%

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

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

                                              \[\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 -5 \cdot 10^{-292} \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 x.re\\ \end{array} \]
                                            5. Add Preprocessing

                                            Alternative 7: 99.2% accurate, 0.9× speedup?

                                            \[\begin{array}{l} x.im\_m = \left|x.im\right| \\ x.im\_s = \mathsf{copysign}\left(1, x.im\right) \\ x.im\_s \cdot \begin{array}{l} \mathbf{if}\;x.im\_m \leq 4 \cdot 10^{+50}:\\ \;\;\;\;\left(x.im\_m + x.re\right) \cdot \left(\left(x.re - x.im\_m\right) \cdot x.im\_m\right) + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\ \mathbf{else}:\\ \;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\ \end{array} \end{array} \]
                                            x.im\_m = (fabs.f64 x.im)
                                            x.im\_s = (copysign.f64 #s(literal 1 binary64) x.im)
                                            (FPCore (x.im_s x.re x.im_m)
                                             :precision binary64
                                             (*
                                              x.im_s
                                              (if (<= x.im_m 4e+50)
                                                (+
                                                 (* (+ x.im_m x.re) (* (- x.re x.im_m) x.im_m))
                                                 (* (+ (* x.re x.im_m) (* x.im_m x.re)) x.re))
                                                (* x.im_m (fma (+ x.re x.im_m) (- x.re x.im_m) 2.0)))))
                                            x.im\_m = fabs(x_46_im);
                                            x.im\_s = copysign(1.0, x_46_im);
                                            double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
                                            	double tmp;
                                            	if (x_46_im_m <= 4e+50) {
                                            		tmp = ((x_46_im_m + x_46_re) * ((x_46_re - x_46_im_m) * x_46_im_m)) + (((x_46_re * x_46_im_m) + (x_46_im_m * x_46_re)) * x_46_re);
                                            	} else {
                                            		tmp = x_46_im_m * fma((x_46_re + x_46_im_m), (x_46_re - x_46_im_m), 2.0);
                                            	}
                                            	return x_46_im_s * tmp;
                                            }
                                            
                                            x.im\_m = abs(x_46_im)
                                            x.im\_s = copysign(1.0, x_46_im)
                                            function code(x_46_im_s, x_46_re, x_46_im_m)
                                            	tmp = 0.0
                                            	if (x_46_im_m <= 4e+50)
                                            		tmp = Float64(Float64(Float64(x_46_im_m + x_46_re) * Float64(Float64(x_46_re - x_46_im_m) * x_46_im_m)) + Float64(Float64(Float64(x_46_re * x_46_im_m) + Float64(x_46_im_m * x_46_re)) * x_46_re));
                                            	else
                                            		tmp = Float64(x_46_im_m * fma(Float64(x_46_re + x_46_im_m), Float64(x_46_re - x_46_im_m), 2.0));
                                            	end
                                            	return Float64(x_46_im_s * tmp)
                                            end
                                            
                                            x.im\_m = N[Abs[x$46$im], $MachinePrecision]
                                            x.im\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x$46$im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                                            code[x$46$im$95$s_, x$46$re_, x$46$im$95$m_] := N[(x$46$im$95$s * If[LessEqual[x$46$im$95$m, 4e+50], N[(N[(N[(x$46$im$95$m + x$46$re), $MachinePrecision] * N[(N[(x$46$re - x$46$im$95$m), $MachinePrecision] * x$46$im$95$m), $MachinePrecision]), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$im$95$m), $MachinePrecision] + N[(x$46$im$95$m * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision], N[(x$46$im$95$m * N[(N[(x$46$re + x$46$im$95$m), $MachinePrecision] * N[(x$46$re - x$46$im$95$m), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
                                            
                                            \begin{array}{l}
                                            x.im\_m = \left|x.im\right|
                                            \\
                                            x.im\_s = \mathsf{copysign}\left(1, x.im\right)
                                            
                                            \\
                                            x.im\_s \cdot \begin{array}{l}
                                            \mathbf{if}\;x.im\_m \leq 4 \cdot 10^{+50}:\\
                                            \;\;\;\;\left(x.im\_m + x.re\right) \cdot \left(\left(x.re - x.im\_m\right) \cdot x.im\_m\right) + \left(x.re \cdot x.im\_m + x.im\_m \cdot x.re\right) \cdot x.re\\
                                            
                                            \mathbf{else}:\\
                                            \;\;\;\;x.im\_m \cdot \mathsf{fma}\left(x.re + x.im\_m, x.re - x.im\_m, 2\right)\\
                                            
                                            
                                            \end{array}
                                            \end{array}
                                            
                                            Derivation
                                            1. Split input into 2 regimes
                                            2. if x.im < 4.0000000000000003e50

                                              1. Initial program 87.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--.f6496.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 rewrites96.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 \]

                                              if 4.0000000000000003e50 < x.im

                                              1. Initial program 74.5%

                                                \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                                              2. 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--.f6477.9

                                                  \[\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 rewrites77.9%

                                                \[\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. 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 \]
                                                3. *-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 \]
                                                4. lift-*.f64N/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 \]
                                                5. associate-*l*N/A

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

                                                  \[\leadsto \left(x.re - x.im\right) \cdot \left(x.im \cdot \color{blue}{\left(x.im + x.re\right)}\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                                                7. distribute-rgt-outN/A

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

                                                  \[\leadsto \color{blue}{\mathsf{fma}\left(x.re - x.im, x.im \cdot x.im + x.re \cdot x.im, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right)} \]
                                                9. distribute-rgt-outN/A

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

                                                  \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.im + x.re\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                                                11. lower-*.f6477.9

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

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

                                                  \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.re + x.im\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                                                14. lower-+.f6477.9

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

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

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

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

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

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

                                                  \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \left(x.re + x.im\right), x.re \cdot \left(x.re \cdot x.im + \color{blue}{x.re \cdot x.im}\right)\right) \]
                                                21. distribute-lft-inN/A

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

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

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

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

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

                                                \[\leadsto \color{blue}{x.im \cdot \mathsf{fma}\left(x.re + x.im, x.re - x.im, 2\right)} \]
                                            3. Recombined 2 regimes into one program.
                                            4. Add Preprocessing

                                            Alternative 8: 35.4% accurate, 3.6× speedup?

                                            \[\begin{array}{l} x.im\_m = \left|x.im\right| \\ x.im\_s = \mathsf{copysign}\left(1, x.im\right) \\ x.im\_s \cdot \left(\left(x.im\_m \cdot x.re\right) \cdot x.re\right) \end{array} \]
                                            x.im\_m = (fabs.f64 x.im)
                                            x.im\_s = (copysign.f64 #s(literal 1 binary64) x.im)
                                            (FPCore (x.im_s x.re x.im_m)
                                             :precision binary64
                                             (* x.im_s (* (* x.im_m x.re) x.re)))
                                            x.im\_m = fabs(x_46_im);
                                            x.im\_s = copysign(1.0, x_46_im);
                                            double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
                                            	return x_46_im_s * ((x_46_im_m * x_46_re) * x_46_re);
                                            }
                                            
                                            x.im\_m =     private
                                            x.im\_s =     private
                                            module fmin_fmax_functions
                                                implicit none
                                                private
                                                public fmax
                                                public fmin
                                            
                                                interface fmax
                                                    module procedure fmax88
                                                    module procedure fmax44
                                                    module procedure fmax84
                                                    module procedure fmax48
                                                end interface
                                                interface fmin
                                                    module procedure fmin88
                                                    module procedure fmin44
                                                    module procedure fmin84
                                                    module procedure fmin48
                                                end interface
                                            contains
                                                real(8) function fmax88(x, y) result (res)
                                                    real(8), intent (in) :: x
                                                    real(8), intent (in) :: y
                                                    res = merge(y, merge(x, max(x, y), y /= y), x /= x)
                                                end function
                                                real(4) function fmax44(x, y) result (res)
                                                    real(4), intent (in) :: x
                                                    real(4), intent (in) :: y
                                                    res = merge(y, merge(x, max(x, y), y /= y), x /= x)
                                                end function
                                                real(8) function fmax84(x, y) result(res)
                                                    real(8), intent (in) :: x
                                                    real(4), intent (in) :: y
                                                    res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
                                                end function
                                                real(8) function fmax48(x, y) result(res)
                                                    real(4), intent (in) :: x
                                                    real(8), intent (in) :: y
                                                    res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
                                                end function
                                                real(8) function fmin88(x, y) result (res)
                                                    real(8), intent (in) :: x
                                                    real(8), intent (in) :: y
                                                    res = merge(y, merge(x, min(x, y), y /= y), x /= x)
                                                end function
                                                real(4) function fmin44(x, y) result (res)
                                                    real(4), intent (in) :: x
                                                    real(4), intent (in) :: y
                                                    res = merge(y, merge(x, min(x, y), y /= y), x /= x)
                                                end function
                                                real(8) function fmin84(x, y) result(res)
                                                    real(8), intent (in) :: x
                                                    real(4), intent (in) :: y
                                                    res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
                                                end function
                                                real(8) function fmin48(x, y) result(res)
                                                    real(4), intent (in) :: x
                                                    real(8), intent (in) :: y
                                                    res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
                                                end function
                                            end module
                                            
                                            real(8) function code(x_46im_s, x_46re, x_46im_m)
                                            use fmin_fmax_functions
                                                real(8), intent (in) :: x_46im_s
                                                real(8), intent (in) :: x_46re
                                                real(8), intent (in) :: x_46im_m
                                                code = x_46im_s * ((x_46im_m * x_46re) * x_46re)
                                            end function
                                            
                                            x.im\_m = Math.abs(x_46_im);
                                            x.im\_s = Math.copySign(1.0, x_46_im);
                                            public static double code(double x_46_im_s, double x_46_re, double x_46_im_m) {
                                            	return x_46_im_s * ((x_46_im_m * x_46_re) * x_46_re);
                                            }
                                            
                                            x.im\_m = math.fabs(x_46_im)
                                            x.im\_s = math.copysign(1.0, x_46_im)
                                            def code(x_46_im_s, x_46_re, x_46_im_m):
                                            	return x_46_im_s * ((x_46_im_m * x_46_re) * x_46_re)
                                            
                                            x.im\_m = abs(x_46_im)
                                            x.im\_s = copysign(1.0, x_46_im)
                                            function code(x_46_im_s, x_46_re, x_46_im_m)
                                            	return Float64(x_46_im_s * Float64(Float64(x_46_im_m * x_46_re) * x_46_re))
                                            end
                                            
                                            x.im\_m = abs(x_46_im);
                                            x.im\_s = sign(x_46_im) * abs(1.0);
                                            function tmp = code(x_46_im_s, x_46_re, x_46_im_m)
                                            	tmp = x_46_im_s * ((x_46_im_m * x_46_re) * x_46_re);
                                            end
                                            
                                            x.im\_m = N[Abs[x$46$im], $MachinePrecision]
                                            x.im\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x$46$im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                                            code[x$46$im$95$s_, x$46$re_, x$46$im$95$m_] := N[(x$46$im$95$s * N[(N[(x$46$im$95$m * x$46$re), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]
                                            
                                            \begin{array}{l}
                                            x.im\_m = \left|x.im\right|
                                            \\
                                            x.im\_s = \mathsf{copysign}\left(1, x.im\right)
                                            
                                            \\
                                            x.im\_s \cdot \left(\left(x.im\_m \cdot x.re\right) \cdot x.re\right)
                                            \end{array}
                                            
                                            Derivation
                                            1. Initial program 84.2%

                                              \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                                            2. 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--.f6492.0

                                                \[\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 rewrites92.0%

                                              \[\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. 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 \]
                                              3. *-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 \]
                                              4. lift-*.f64N/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 \]
                                              5. associate-*l*N/A

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

                                                \[\leadsto \left(x.re - x.im\right) \cdot \left(x.im \cdot \color{blue}{\left(x.im + x.re\right)}\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re \]
                                              7. distribute-rgt-outN/A

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

                                                \[\leadsto \color{blue}{\mathsf{fma}\left(x.re - x.im, x.im \cdot x.im + x.re \cdot x.im, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right)} \]
                                              9. distribute-rgt-outN/A

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

                                                \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.im + x.re\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                                              11. lower-*.f6492.0

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

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

                                                \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \color{blue}{\left(x.re + x.im\right)}, \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\right) \]
                                              14. lower-+.f6492.0

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

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

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

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

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

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

                                                \[\leadsto \mathsf{fma}\left(x.re - x.im, x.im \cdot \left(x.re + x.im\right), x.re \cdot \left(x.re \cdot x.im + \color{blue}{x.re \cdot x.im}\right)\right) \]
                                              21. distribute-lft-inN/A

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

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

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

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

                                              \[\leadsto \color{blue}{x.im \cdot {x.re}^{2}} \]
                                            8. Step-by-step derivation
                                              1. Applied rewrites33.2%

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

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

                                                Developer Target 1: 91.7% 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));
                                                }
                                                
                                                module fmin_fmax_functions
                                                    implicit none
                                                    private
                                                    public fmax
                                                    public fmin
                                                
                                                    interface fmax
                                                        module procedure fmax88
                                                        module procedure fmax44
                                                        module procedure fmax84
                                                        module procedure fmax48
                                                    end interface
                                                    interface fmin
                                                        module procedure fmin88
                                                        module procedure fmin44
                                                        module procedure fmin84
                                                        module procedure fmin48
                                                    end interface
                                                contains
                                                    real(8) function fmax88(x, y) result (res)
                                                        real(8), intent (in) :: x
                                                        real(8), intent (in) :: y
                                                        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
                                                    end function
                                                    real(4) function fmax44(x, y) result (res)
                                                        real(4), intent (in) :: x
                                                        real(4), intent (in) :: y
                                                        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
                                                    end function
                                                    real(8) function fmax84(x, y) result(res)
                                                        real(8), intent (in) :: x
                                                        real(4), intent (in) :: y
                                                        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
                                                    end function
                                                    real(8) function fmax48(x, y) result(res)
                                                        real(4), intent (in) :: x
                                                        real(8), intent (in) :: y
                                                        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
                                                    end function
                                                    real(8) function fmin88(x, y) result (res)
                                                        real(8), intent (in) :: x
                                                        real(8), intent (in) :: y
                                                        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
                                                    end function
                                                    real(4) function fmin44(x, y) result (res)
                                                        real(4), intent (in) :: x
                                                        real(4), intent (in) :: y
                                                        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
                                                    end function
                                                    real(8) function fmin84(x, y) result(res)
                                                        real(8), intent (in) :: x
                                                        real(4), intent (in) :: y
                                                        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
                                                    end function
                                                    real(8) function fmin48(x, y) result(res)
                                                        real(4), intent (in) :: x
                                                        real(8), intent (in) :: y
                                                        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
                                                    end function
                                                end module
                                                
                                                real(8) function code(x_46re, x_46im)
                                                use fmin_fmax_functions
                                                    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 2025019 
                                                (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)))