
(FPCore (x.re x.im) :precision binary64 (+ (* (- (* x.re x.re) (* x.im x.im)) x.im) (* (+ (* x.re x.im) (* x.im x.re)) x.re)))
double code(double x_46_re, double x_46_im) {
return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re);
}
real(8) function code(x_46re, x_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
code = (((x_46re * x_46re) - (x_46im * x_46im)) * x_46im) + (((x_46re * x_46im) + (x_46im * x_46re)) * x_46re)
end function
public static double code(double x_46_re, double x_46_im) {
return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re);
}
def code(x_46_re, x_46_im): return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re)
function code(x_46_re, x_46_im) return Float64(Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im * x_46_im)) * x_46_im) + Float64(Float64(Float64(x_46_re * x_46_im) + Float64(x_46_im * x_46_re)) * x_46_re)) end
function tmp = code(x_46_re, x_46_im) tmp = (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re); end
code[x$46$re_, x$46$im_] := N[(N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$im), $MachinePrecision] + N[(x$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 6 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x.re x.im) :precision binary64 (+ (* (- (* x.re x.re) (* x.im x.im)) x.im) (* (+ (* x.re x.im) (* x.im x.re)) x.re)))
double code(double x_46_re, double x_46_im) {
return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re);
}
real(8) function code(x_46re, x_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
code = (((x_46re * x_46re) - (x_46im * x_46im)) * x_46im) + (((x_46re * x_46im) + (x_46im * x_46re)) * x_46re)
end function
public static double code(double x_46_re, double x_46_im) {
return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re);
}
def code(x_46_re, x_46_im): return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re)
function code(x_46_re, x_46_im) return Float64(Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im * x_46_im)) * x_46_im) + Float64(Float64(Float64(x_46_re * x_46_im) + Float64(x_46_im * x_46_re)) * x_46_re)) end
function tmp = code(x_46_re, x_46_im) tmp = (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re); end
code[x$46$re_, x$46$im_] := N[(N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$im), $MachinePrecision] + N[(x$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re
\end{array}
(FPCore (x.re x.im)
:precision binary64
(let* ((t_0 (* (+ (* x.im x.re) (* x.im x.re)) x.re)))
(if (<= (+ t_0 (* (- (* x.re x.re) (* x.im x.im)) x.im)) INFINITY)
(+ (* (* (- x.re x.im) x.im) (+ x.im x.re)) t_0)
(* (* (fma (/ (- x.im) x.re) (/ x.im x.re) 3.0) (* x.re x.re)) x.im))))
double code(double x_46_re, double x_46_im) {
double t_0 = ((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re;
double tmp;
if ((t_0 + (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im)) <= ((double) INFINITY)) {
tmp = (((x_46_re - x_46_im) * x_46_im) * (x_46_im + x_46_re)) + t_0;
} else {
tmp = (fma((-x_46_im / x_46_re), (x_46_im / x_46_re), 3.0) * (x_46_re * x_46_re)) * x_46_im;
}
return tmp;
}
function code(x_46_re, x_46_im) t_0 = Float64(Float64(Float64(x_46_im * x_46_re) + Float64(x_46_im * x_46_re)) * x_46_re) tmp = 0.0 if (Float64(t_0 + Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im * x_46_im)) * x_46_im)) <= Inf) tmp = Float64(Float64(Float64(Float64(x_46_re - x_46_im) * x_46_im) * Float64(x_46_im + x_46_re)) + t_0); else tmp = Float64(Float64(fma(Float64(Float64(-x_46_im) / x_46_re), Float64(x_46_im / x_46_re), 3.0) * Float64(x_46_re * x_46_re)) * x_46_im); end return tmp end
code[x$46$re_, x$46$im_] := Block[{t$95$0 = N[(N[(N[(x$46$im * x$46$re), $MachinePrecision] + N[(x$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]}, If[LessEqual[N[(t$95$0 + N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision]), $MachinePrecision], Infinity], N[(N[(N[(N[(x$46$re - x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision] * N[(x$46$im + x$46$re), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision], N[(N[(N[(N[((-x$46$im) / x$46$re), $MachinePrecision] * N[(x$46$im / x$46$re), $MachinePrecision] + 3.0), $MachinePrecision] * N[(x$46$re * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(x.im \cdot x.re + x.im \cdot x.re\right) \cdot x.re\\
\mathbf{if}\;t\_0 + \left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im \leq \infty:\\
\;\;\;\;\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im + x.re\right) + t\_0\\
\mathbf{else}:\\
\;\;\;\;\left(\mathsf{fma}\left(\frac{-x.im}{x.re}, \frac{x.im}{x.re}, 3\right) \cdot \left(x.re \cdot x.re\right)\right) \cdot x.im\\
\end{array}
\end{array}
if (+.f64 (*.f64 (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im)) x.im) (*.f64 (+.f64 (*.f64 x.re x.im) (*.f64 x.im x.re)) x.re)) < +inf.0Initial program 95.0%
lift-*.f64N/A
lift--.f64N/A
lift-*.f64N/A
lift-*.f64N/A
difference-of-squaresN/A
associate-*l*N/A
lower-*.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-*.f64N/A
lower--.f6499.8
Applied rewrites99.8%
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)) Initial program 0.0%
Taylor expanded in x.re around 0
Applied rewrites63.6%
Taylor expanded in x.re around inf
Applied rewrites100.0%
Final simplification99.8%
(FPCore (x.re x.im)
:precision binary64
(let* ((t_0
(+
(* (+ (* x.im x.re) (* x.im x.re)) x.re)
(* (- (* x.re x.re) (* x.im x.im)) x.im)))
(t_1 (* (* (- x.im) x.im) x.im)))
(if (<= t_0 -1e-310)
t_1
(if (<= t_0 INFINITY) (* (* (* 3.0 x.im) x.re) x.re) t_1))))
double code(double x_46_re, double x_46_im) {
double t_0 = (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re) + (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im);
double t_1 = (-x_46_im * x_46_im) * x_46_im;
double tmp;
if (t_0 <= -1e-310) {
tmp = t_1;
} else if (t_0 <= ((double) INFINITY)) {
tmp = ((3.0 * x_46_im) * x_46_re) * x_46_re;
} else {
tmp = t_1;
}
return tmp;
}
public static double code(double x_46_re, double x_46_im) {
double t_0 = (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re) + (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im);
double t_1 = (-x_46_im * x_46_im) * x_46_im;
double tmp;
if (t_0 <= -1e-310) {
tmp = t_1;
} else if (t_0 <= Double.POSITIVE_INFINITY) {
tmp = ((3.0 * x_46_im) * x_46_re) * x_46_re;
} else {
tmp = t_1;
}
return tmp;
}
def code(x_46_re, x_46_im): t_0 = (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re) + (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) t_1 = (-x_46_im * x_46_im) * x_46_im tmp = 0 if t_0 <= -1e-310: tmp = t_1 elif t_0 <= math.inf: tmp = ((3.0 * x_46_im) * x_46_re) * x_46_re else: tmp = t_1 return tmp
function code(x_46_re, x_46_im) t_0 = Float64(Float64(Float64(Float64(x_46_im * x_46_re) + Float64(x_46_im * x_46_re)) * x_46_re) + Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im * x_46_im)) * x_46_im)) t_1 = Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im) tmp = 0.0 if (t_0 <= -1e-310) tmp = t_1; elseif (t_0 <= Inf) tmp = Float64(Float64(Float64(3.0 * x_46_im) * x_46_re) * x_46_re); else tmp = t_1; end return tmp end
function tmp_2 = code(x_46_re, x_46_im) t_0 = (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re) + (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im); t_1 = (-x_46_im * x_46_im) * x_46_im; tmp = 0.0; if (t_0 <= -1e-310) tmp = t_1; elseif (t_0 <= Inf) tmp = ((3.0 * x_46_im) * x_46_re) * x_46_re; else tmp = t_1; end tmp_2 = tmp; end
code[x$46$re_, x$46$im_] := Block[{t$95$0 = N[(N[(N[(N[(x$46$im * x$46$re), $MachinePrecision] + N[(x$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]}, If[LessEqual[t$95$0, -1e-310], t$95$1, If[LessEqual[t$95$0, Infinity], N[(N[(N[(3.0 * x$46$im), $MachinePrecision] * x$46$re), $MachinePrecision] * x$46$re), $MachinePrecision], t$95$1]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(x.im \cdot x.re + x.im \cdot x.re\right) \cdot x.re + \left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im\\
t_1 := \left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\
\mathbf{if}\;t\_0 \leq -1 \cdot 10^{-310}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_0 \leq \infty:\\
\;\;\;\;\left(\left(3 \cdot x.im\right) \cdot x.re\right) \cdot x.re\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (*.f64 (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im)) x.im) (*.f64 (+.f64 (*.f64 x.re x.im) (*.f64 x.im x.re)) x.re)) < -9.999999999999969e-311 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)) Initial program 77.9%
Taylor expanded in x.re around 0
mul-1-negN/A
lower-neg.f64N/A
lower-pow.f6456.2
Applied rewrites56.2%
Applied rewrites56.1%
if -9.999999999999969e-311 < (+.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.0Initial program 94.5%
Taylor expanded in x.re around inf
+-commutativeN/A
distribute-rgt-inN/A
*-commutativeN/A
associate-*r*N/A
distribute-lft-inN/A
*-commutativeN/A
*-rgt-identityN/A
*-inversesN/A
associate-/l*N/A
unpow2N/A
cube-multN/A
associate-/l*N/A
associate-*l/N/A
distribute-lft1-inN/A
metadata-evalN/A
associate-*r/N/A
associate-*l*N/A
metadata-evalN/A
metadata-evalN/A
distribute-lft-neg-inN/A
Applied rewrites58.2%
Applied rewrites63.5%
Final simplification60.1%
(FPCore (x.re x.im)
:precision binary64
(let* ((t_0
(+
(* (+ (* x.im x.re) (* x.im x.re)) x.re)
(* (- (* x.re x.re) (* x.im x.im)) x.im)))
(t_1 (* (* (- x.im) x.im) x.im)))
(if (<= t_0 -1e-310)
t_1
(if (<= t_0 INFINITY) (* (* 3.0 (* x.im x.re)) x.re) t_1))))
double code(double x_46_re, double x_46_im) {
double t_0 = (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re) + (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im);
double t_1 = (-x_46_im * x_46_im) * x_46_im;
double tmp;
if (t_0 <= -1e-310) {
tmp = t_1;
} else if (t_0 <= ((double) INFINITY)) {
tmp = (3.0 * (x_46_im * x_46_re)) * x_46_re;
} else {
tmp = t_1;
}
return tmp;
}
public static double code(double x_46_re, double x_46_im) {
double t_0 = (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re) + (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im);
double t_1 = (-x_46_im * x_46_im) * x_46_im;
double tmp;
if (t_0 <= -1e-310) {
tmp = t_1;
} else if (t_0 <= Double.POSITIVE_INFINITY) {
tmp = (3.0 * (x_46_im * x_46_re)) * x_46_re;
} else {
tmp = t_1;
}
return tmp;
}
def code(x_46_re, x_46_im): t_0 = (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re) + (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) t_1 = (-x_46_im * x_46_im) * x_46_im tmp = 0 if t_0 <= -1e-310: tmp = t_1 elif t_0 <= math.inf: tmp = (3.0 * (x_46_im * x_46_re)) * x_46_re else: tmp = t_1 return tmp
function code(x_46_re, x_46_im) t_0 = Float64(Float64(Float64(Float64(x_46_im * x_46_re) + Float64(x_46_im * x_46_re)) * x_46_re) + Float64(Float64(Float64(x_46_re * x_46_re) - Float64(x_46_im * x_46_im)) * x_46_im)) t_1 = Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im) tmp = 0.0 if (t_0 <= -1e-310) tmp = t_1; elseif (t_0 <= Inf) tmp = Float64(Float64(3.0 * Float64(x_46_im * x_46_re)) * x_46_re); else tmp = t_1; end return tmp end
function tmp_2 = code(x_46_re, x_46_im) t_0 = (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re) + (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im); t_1 = (-x_46_im * x_46_im) * x_46_im; tmp = 0.0; if (t_0 <= -1e-310) tmp = t_1; elseif (t_0 <= Inf) tmp = (3.0 * (x_46_im * x_46_re)) * x_46_re; else tmp = t_1; end tmp_2 = tmp; end
code[x$46$re_, x$46$im_] := Block[{t$95$0 = N[(N[(N[(N[(x$46$im * x$46$re), $MachinePrecision] + N[(x$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision] + N[(N[(N[(x$46$re * x$46$re), $MachinePrecision] - N[(x$46$im * x$46$im), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]}, If[LessEqual[t$95$0, -1e-310], t$95$1, If[LessEqual[t$95$0, Infinity], N[(N[(3.0 * N[(x$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision], t$95$1]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(x.im \cdot x.re + x.im \cdot x.re\right) \cdot x.re + \left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im\\
t_1 := \left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\
\mathbf{if}\;t\_0 \leq -1 \cdot 10^{-310}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_0 \leq \infty:\\
\;\;\;\;\left(3 \cdot \left(x.im \cdot x.re\right)\right) \cdot x.re\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (*.f64 (-.f64 (*.f64 x.re x.re) (*.f64 x.im x.im)) x.im) (*.f64 (+.f64 (*.f64 x.re x.im) (*.f64 x.im x.re)) x.re)) < -9.999999999999969e-311 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)) Initial program 77.9%
Taylor expanded in x.re around 0
mul-1-negN/A
lower-neg.f64N/A
lower-pow.f6456.2
Applied rewrites56.2%
Applied rewrites56.1%
if -9.999999999999969e-311 < (+.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.0Initial program 94.5%
Taylor expanded in x.re around inf
+-commutativeN/A
distribute-rgt-inN/A
*-commutativeN/A
associate-*r*N/A
distribute-lft-inN/A
*-commutativeN/A
*-rgt-identityN/A
*-inversesN/A
associate-/l*N/A
unpow2N/A
cube-multN/A
associate-/l*N/A
associate-*l/N/A
distribute-lft1-inN/A
metadata-evalN/A
associate-*r/N/A
associate-*l*N/A
metadata-evalN/A
metadata-evalN/A
distribute-lft-neg-inN/A
Applied rewrites58.2%
Applied rewrites58.2%
Applied rewrites63.5%
Final simplification60.1%
(FPCore (x.re x.im)
:precision binary64
(if (<= x.im 4.7e+222)
(+
(* (* (- x.re x.im) x.im) (+ x.im x.re))
(* (+ (* x.im x.re) (* x.im x.re)) x.re))
(* (* (- x.im) x.im) x.im)))
double code(double x_46_re, double x_46_im) {
double tmp;
if (x_46_im <= 4.7e+222) {
tmp = (((x_46_re - x_46_im) * x_46_im) * (x_46_im + x_46_re)) + (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re);
} else {
tmp = (-x_46_im * x_46_im) * x_46_im;
}
return tmp;
}
real(8) function code(x_46re, x_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
real(8) :: tmp
if (x_46im <= 4.7d+222) then
tmp = (((x_46re - x_46im) * x_46im) * (x_46im + x_46re)) + (((x_46im * x_46re) + (x_46im * x_46re)) * x_46re)
else
tmp = (-x_46im * x_46im) * x_46im
end if
code = tmp
end function
public static double code(double x_46_re, double x_46_im) {
double tmp;
if (x_46_im <= 4.7e+222) {
tmp = (((x_46_re - x_46_im) * x_46_im) * (x_46_im + x_46_re)) + (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re);
} else {
tmp = (-x_46_im * x_46_im) * x_46_im;
}
return tmp;
}
def code(x_46_re, x_46_im): tmp = 0 if x_46_im <= 4.7e+222: tmp = (((x_46_re - x_46_im) * x_46_im) * (x_46_im + x_46_re)) + (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re) else: tmp = (-x_46_im * x_46_im) * x_46_im return tmp
function code(x_46_re, x_46_im) tmp = 0.0 if (x_46_im <= 4.7e+222) tmp = Float64(Float64(Float64(Float64(x_46_re - x_46_im) * x_46_im) * Float64(x_46_im + x_46_re)) + Float64(Float64(Float64(x_46_im * x_46_re) + Float64(x_46_im * x_46_re)) * x_46_re)); else tmp = Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im); end return tmp end
function tmp_2 = code(x_46_re, x_46_im) tmp = 0.0; if (x_46_im <= 4.7e+222) tmp = (((x_46_re - x_46_im) * x_46_im) * (x_46_im + x_46_re)) + (((x_46_im * x_46_re) + (x_46_im * x_46_re)) * x_46_re); else tmp = (-x_46_im * x_46_im) * x_46_im; end tmp_2 = tmp; end
code[x$46$re_, x$46$im_] := If[LessEqual[x$46$im, 4.7e+222], N[(N[(N[(N[(x$46$re - x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision] * N[(x$46$im + x$46$re), $MachinePrecision]), $MachinePrecision] + N[(N[(N[(x$46$im * x$46$re), $MachinePrecision] + N[(x$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision], N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x.im \leq 4.7 \cdot 10^{+222}:\\
\;\;\;\;\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im + x.re\right) + \left(x.im \cdot x.re + x.im \cdot x.re\right) \cdot x.re\\
\mathbf{else}:\\
\;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\
\end{array}
\end{array}
if x.im < 4.6999999999999999e222Initial program 89.5%
lift-*.f64N/A
lift--.f64N/A
lift-*.f64N/A
lift-*.f64N/A
difference-of-squaresN/A
associate-*l*N/A
lower-*.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-*.f64N/A
lower--.f6496.8
Applied rewrites96.8%
if 4.6999999999999999e222 < x.im Initial program 57.1%
Taylor expanded in x.re around 0
mul-1-negN/A
lower-neg.f64N/A
lower-pow.f6495.2
Applied rewrites95.2%
Applied rewrites95.2%
Final simplification96.7%
(FPCore (x.re x.im)
:precision binary64
(if (<= x.im 2.15e-104)
(* (* (* 3.0 x.im) x.re) x.re)
(if (<= x.im 4e+244)
(* (fma (- x.im) x.im (* (* 3.0 x.re) x.re)) x.im)
(* (* (- x.im) x.im) x.im))))
double code(double x_46_re, double x_46_im) {
double tmp;
if (x_46_im <= 2.15e-104) {
tmp = ((3.0 * x_46_im) * x_46_re) * x_46_re;
} else if (x_46_im <= 4e+244) {
tmp = fma(-x_46_im, x_46_im, ((3.0 * x_46_re) * x_46_re)) * x_46_im;
} else {
tmp = (-x_46_im * x_46_im) * x_46_im;
}
return tmp;
}
function code(x_46_re, x_46_im) tmp = 0.0 if (x_46_im <= 2.15e-104) tmp = Float64(Float64(Float64(3.0 * x_46_im) * x_46_re) * x_46_re); elseif (x_46_im <= 4e+244) tmp = Float64(fma(Float64(-x_46_im), x_46_im, Float64(Float64(3.0 * x_46_re) * x_46_re)) * x_46_im); else tmp = Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im); end return tmp end
code[x$46$re_, x$46$im_] := If[LessEqual[x$46$im, 2.15e-104], N[(N[(N[(3.0 * x$46$im), $MachinePrecision] * x$46$re), $MachinePrecision] * x$46$re), $MachinePrecision], If[LessEqual[x$46$im, 4e+244], N[(N[((-x$46$im) * x$46$im + N[(N[(3.0 * x$46$re), $MachinePrecision] * x$46$re), $MachinePrecision]), $MachinePrecision] * x$46$im), $MachinePrecision], N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x.im \leq 2.15 \cdot 10^{-104}:\\
\;\;\;\;\left(\left(3 \cdot x.im\right) \cdot x.re\right) \cdot x.re\\
\mathbf{elif}\;x.im \leq 4 \cdot 10^{+244}:\\
\;\;\;\;\mathsf{fma}\left(-x.im, x.im, \left(3 \cdot x.re\right) \cdot x.re\right) \cdot x.im\\
\mathbf{else}:\\
\;\;\;\;\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im\\
\end{array}
\end{array}
if x.im < 2.15000000000000005e-104Initial program 88.1%
Taylor expanded in x.re around inf
+-commutativeN/A
distribute-rgt-inN/A
*-commutativeN/A
associate-*r*N/A
distribute-lft-inN/A
*-commutativeN/A
*-rgt-identityN/A
*-inversesN/A
associate-/l*N/A
unpow2N/A
cube-multN/A
associate-/l*N/A
associate-*l/N/A
distribute-lft1-inN/A
metadata-evalN/A
associate-*r/N/A
associate-*l*N/A
metadata-evalN/A
metadata-evalN/A
distribute-lft-neg-inN/A
Applied rewrites60.1%
Applied rewrites66.6%
if 2.15000000000000005e-104 < x.im < 4.0000000000000003e244Initial program 92.1%
Taylor expanded in x.re around 0
Applied rewrites99.8%
if 4.0000000000000003e244 < x.im Initial program 57.9%
Taylor expanded in x.re around 0
mul-1-negN/A
lower-neg.f64N/A
lower-pow.f6494.7
Applied rewrites94.7%
Applied rewrites94.7%
Final simplification77.1%
(FPCore (x.re x.im) :precision binary64 (* (* (- x.im) x.im) x.im))
double code(double x_46_re, double x_46_im) {
return (-x_46_im * x_46_im) * x_46_im;
}
real(8) function code(x_46re, x_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
code = (-x_46im * x_46im) * x_46im
end function
public static double code(double x_46_re, double x_46_im) {
return (-x_46_im * x_46_im) * x_46_im;
}
def code(x_46_re, x_46_im): return (-x_46_im * x_46_im) * x_46_im
function code(x_46_re, x_46_im) return Float64(Float64(Float64(-x_46_im) * x_46_im) * x_46_im) end
function tmp = code(x_46_re, x_46_im) tmp = (-x_46_im * x_46_im) * x_46_im; end
code[x$46$re_, x$46$im_] := N[(N[((-x$46$im) * x$46$im), $MachinePrecision] * x$46$im), $MachinePrecision]
\begin{array}{l}
\\
\left(\left(-x.im\right) \cdot x.im\right) \cdot x.im
\end{array}
Initial program 86.8%
Taylor expanded in x.re around 0
mul-1-negN/A
lower-neg.f64N/A
lower-pow.f6462.3
Applied rewrites62.3%
Applied rewrites62.3%
(FPCore (x.re x.im) :precision binary64 (+ (* (* x.re x.im) (* 2.0 x.re)) (* (* x.im (- x.re x.im)) (+ x.re x.im))))
double code(double x_46_re, double x_46_im) {
return ((x_46_re * x_46_im) * (2.0 * x_46_re)) + ((x_46_im * (x_46_re - x_46_im)) * (x_46_re + x_46_im));
}
real(8) function code(x_46re, x_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
code = ((x_46re * x_46im) * (2.0d0 * x_46re)) + ((x_46im * (x_46re - x_46im)) * (x_46re + x_46im))
end function
public static double code(double x_46_re, double x_46_im) {
return ((x_46_re * x_46_im) * (2.0 * x_46_re)) + ((x_46_im * (x_46_re - x_46_im)) * (x_46_re + x_46_im));
}
def code(x_46_re, x_46_im): return ((x_46_re * x_46_im) * (2.0 * x_46_re)) + ((x_46_im * (x_46_re - x_46_im)) * (x_46_re + x_46_im))
function code(x_46_re, x_46_im) return Float64(Float64(Float64(x_46_re * x_46_im) * Float64(2.0 * x_46_re)) + Float64(Float64(x_46_im * Float64(x_46_re - x_46_im)) * Float64(x_46_re + x_46_im))) end
function tmp = code(x_46_re, x_46_im) tmp = ((x_46_re * x_46_im) * (2.0 * x_46_re)) + ((x_46_im * (x_46_re - x_46_im)) * (x_46_re + x_46_im)); end
code[x$46$re_, x$46$im_] := N[(N[(N[(x$46$re * x$46$im), $MachinePrecision] * N[(2.0 * x$46$re), $MachinePrecision]), $MachinePrecision] + N[(N[(x$46$im * N[(x$46$re - x$46$im), $MachinePrecision]), $MachinePrecision] * N[(x$46$re + x$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(x.re \cdot x.im\right) \cdot \left(2 \cdot x.re\right) + \left(x.im \cdot \left(x.re - x.im\right)\right) \cdot \left(x.re + x.im\right)
\end{array}
herbie shell --seed 2024283
(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)))