| Alternative 1 | |
|---|---|
| Accuracy | 99.7% |
| Cost | 964 |
\[\begin{array}{l}
t_0 := x.re \cdot y.im + y.re \cdot x.im\\
\mathbf{if}\;t_0 \leq \infty:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;x.re \cdot y.im\\
\end{array}
\]

(FPCore (x.re x.im y.re y.im) :precision binary64 (+ (* x.re y.im) (* x.im y.re)))
(FPCore (x.re x.im y.re y.im) :precision binary64 (fma y.re x.im (* x.re y.im)))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
return (x_46_re * y_46_im) + (x_46_im * y_46_re);
}
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
return fma(y_46_re, x_46_im, (x_46_re * y_46_im));
}
function code(x_46_re, x_46_im, y_46_re, y_46_im) return Float64(Float64(x_46_re * y_46_im) + Float64(x_46_im * y_46_re)) end
function code(x_46_re, x_46_im, y_46_re, y_46_im) return fma(y_46_re, x_46_im, Float64(x_46_re * y_46_im)) end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := N[(N[(x$46$re * y$46$im), $MachinePrecision] + N[(x$46$im * y$46$re), $MachinePrecision]), $MachinePrecision]
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := N[(y$46$re * x$46$im + N[(x$46$re * y$46$im), $MachinePrecision]), $MachinePrecision]
x.re \cdot y.im + x.im \cdot y.re
\mathsf{fma}\left(y.re, x.im, x.re \cdot y.im\right)
Initial program 98.0%
Taylor expanded in x.re around 0 98.0%
Simplified100.0%
[Start]98.0 | \[ x.re \cdot y.im + y.re \cdot x.im
\] |
|---|---|
+-commutative [=>]98.0 | \[ \color{blue}{y.re \cdot x.im + x.re \cdot y.im}
\] |
fma-def [=>]100.0 | \[ \color{blue}{\mathsf{fma}\left(y.re, x.im, x.re \cdot y.im\right)}
\] |
Final simplification100.0%
| Alternative 1 | |
|---|---|
| Accuracy | 99.7% |
| Cost | 964 |
| Alternative 2 | |
|---|---|
| Accuracy | 76.7% |
| Cost | 712 |
| Alternative 3 | |
|---|---|
| Accuracy | 51.7% |
| Cost | 192 |
herbie shell --seed 2023159
(FPCore (x.re x.im y.re y.im)
:name "_multiplyComplex, imaginary part"
:precision binary64
(+ (* x.re y.im) (* x.im y.re)))