
(FPCore (x.re x.im y.re y.im) :precision binary64 (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
return ((x_46_im * y_46_re) - (x_46_re * y_46_im)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im));
}
real(8) function code(x_46re, x_46im, y_46re, y_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
real(8), intent (in) :: y_46re
real(8), intent (in) :: y_46im
code = ((x_46im * y_46re) - (x_46re * y_46im)) / ((y_46re * y_46re) + (y_46im * y_46im))
end function
public static double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
return ((x_46_im * y_46_re) - (x_46_re * y_46_im)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im));
}
def code(x_46_re, x_46_im, y_46_re, y_46_im): return ((x_46_im * y_46_re) - (x_46_re * y_46_im)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im))
function code(x_46_re, x_46_im, y_46_re, y_46_im) return Float64(Float64(Float64(x_46_im * y_46_re) - Float64(x_46_re * y_46_im)) / Float64(Float64(y_46_re * y_46_re) + Float64(y_46_im * y_46_im))) end
function tmp = code(x_46_re, x_46_im, y_46_re, y_46_im) tmp = ((x_46_im * y_46_re) - (x_46_re * y_46_im)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im)); end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := N[(N[(N[(x$46$im * y$46$re), $MachinePrecision] - N[(x$46$re * y$46$im), $MachinePrecision]), $MachinePrecision] / N[(N[(y$46$re * y$46$re), $MachinePrecision] + N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 13 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x.re x.im y.re y.im) :precision binary64 (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
return ((x_46_im * y_46_re) - (x_46_re * y_46_im)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im));
}
real(8) function code(x_46re, x_46im, y_46re, y_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
real(8), intent (in) :: y_46re
real(8), intent (in) :: y_46im
code = ((x_46im * y_46re) - (x_46re * y_46im)) / ((y_46re * y_46re) + (y_46im * y_46im))
end function
public static double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
return ((x_46_im * y_46_re) - (x_46_re * y_46_im)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im));
}
def code(x_46_re, x_46_im, y_46_re, y_46_im): return ((x_46_im * y_46_re) - (x_46_re * y_46_im)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im))
function code(x_46_re, x_46_im, y_46_re, y_46_im) return Float64(Float64(Float64(x_46_im * y_46_re) - Float64(x_46_re * y_46_im)) / Float64(Float64(y_46_re * y_46_re) + Float64(y_46_im * y_46_im))) end
function tmp = code(x_46_re, x_46_im, y_46_re, y_46_im) tmp = ((x_46_im * y_46_re) - (x_46_re * y_46_im)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im)); end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := N[(N[(N[(x$46$im * y$46$re), $MachinePrecision] - N[(x$46$re * y$46$im), $MachinePrecision]), $MachinePrecision] / N[(N[(y$46$re * y$46$re), $MachinePrecision] + N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\end{array}
(FPCore (x.re x.im y.re y.im)
:precision binary64
(let* ((t_0 (fma y.im y.im (* y.re y.re)))
(t_1 (/ (fma y.re (/ x.im y.im) (- 0.0 x.re)) y.im)))
(if (<= y.im -7.5e+152)
t_1
(if (<= y.im -1.15e-96)
(fma y.im (/ (- 0.0 x.re) t_0) (fma y.re (/ x.im t_0) 0.0))
(if (<= y.im 3.4e-165)
(/ (- x.im (/ (* y.im x.re) y.re)) y.re)
(if (<= y.im 7e+79)
(/ (- (* y.re x.im) (* y.im x.re)) (+ (* y.re y.re) (* y.im y.im)))
t_1))))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = fma(y_46_im, y_46_im, (y_46_re * y_46_re));
double t_1 = fma(y_46_re, (x_46_im / y_46_im), (0.0 - x_46_re)) / y_46_im;
double tmp;
if (y_46_im <= -7.5e+152) {
tmp = t_1;
} else if (y_46_im <= -1.15e-96) {
tmp = fma(y_46_im, ((0.0 - x_46_re) / t_0), fma(y_46_re, (x_46_im / t_0), 0.0));
} else if (y_46_im <= 3.4e-165) {
tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re;
} else if (y_46_im <= 7e+79) {
tmp = ((y_46_re * x_46_im) - (y_46_im * x_46_re)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im));
} else {
tmp = t_1;
}
return tmp;
}
function code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = fma(y_46_im, y_46_im, Float64(y_46_re * y_46_re)) t_1 = Float64(fma(y_46_re, Float64(x_46_im / y_46_im), Float64(0.0 - x_46_re)) / y_46_im) tmp = 0.0 if (y_46_im <= -7.5e+152) tmp = t_1; elseif (y_46_im <= -1.15e-96) tmp = fma(y_46_im, Float64(Float64(0.0 - x_46_re) / t_0), fma(y_46_re, Float64(x_46_im / t_0), 0.0)); elseif (y_46_im <= 3.4e-165) tmp = Float64(Float64(x_46_im - Float64(Float64(y_46_im * x_46_re) / y_46_re)) / y_46_re); elseif (y_46_im <= 7e+79) tmp = Float64(Float64(Float64(y_46_re * x_46_im) - Float64(y_46_im * x_46_re)) / Float64(Float64(y_46_re * y_46_re) + Float64(y_46_im * y_46_im))); else tmp = t_1; end return tmp end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := Block[{t$95$0 = N[(y$46$im * y$46$im + N[(y$46$re * y$46$re), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(y$46$re * N[(x$46$im / y$46$im), $MachinePrecision] + N[(0.0 - x$46$re), $MachinePrecision]), $MachinePrecision] / y$46$im), $MachinePrecision]}, If[LessEqual[y$46$im, -7.5e+152], t$95$1, If[LessEqual[y$46$im, -1.15e-96], N[(y$46$im * N[(N[(0.0 - x$46$re), $MachinePrecision] / t$95$0), $MachinePrecision] + N[(y$46$re * N[(x$46$im / t$95$0), $MachinePrecision] + 0.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[y$46$im, 3.4e-165], N[(N[(x$46$im - N[(N[(y$46$im * x$46$re), $MachinePrecision] / y$46$re), $MachinePrecision]), $MachinePrecision] / y$46$re), $MachinePrecision], If[LessEqual[y$46$im, 7e+79], N[(N[(N[(y$46$re * x$46$im), $MachinePrecision] - N[(y$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] / N[(N[(y$46$re * y$46$re), $MachinePrecision] + N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(y.im, y.im, y.re \cdot y.re\right)\\
t_1 := \frac{\mathsf{fma}\left(y.re, \frac{x.im}{y.im}, 0 - x.re\right)}{y.im}\\
\mathbf{if}\;y.im \leq -7.5 \cdot 10^{+152}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;y.im \leq -1.15 \cdot 10^{-96}:\\
\;\;\;\;\mathsf{fma}\left(y.im, \frac{0 - x.re}{t\_0}, \mathsf{fma}\left(y.re, \frac{x.im}{t\_0}, 0\right)\right)\\
\mathbf{elif}\;y.im \leq 3.4 \cdot 10^{-165}:\\
\;\;\;\;\frac{x.im - \frac{y.im \cdot x.re}{y.re}}{y.re}\\
\mathbf{elif}\;y.im \leq 7 \cdot 10^{+79}:\\
\;\;\;\;\frac{y.re \cdot x.im - y.im \cdot x.re}{y.re \cdot y.re + y.im \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if y.im < -7.50000000000000046e152 or 6.99999999999999961e79 < y.im Initial program 39.7%
Taylor expanded in y.re around 0
+-commutativeN/A
mul-1-negN/A
unsub-negN/A
unpow2N/A
associate-/r*N/A
div-subN/A
/-lowering-/.f64N/A
sub-negN/A
*-commutativeN/A
associate-/l*N/A
mul-1-negN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f6491.2
Simplified91.2%
if -7.50000000000000046e152 < y.im < -1.15e-96Initial program 79.6%
Taylor expanded in x.im around 0
mul-1-negN/A
distribute-neg-frac2N/A
*-commutativeN/A
associate-/l*N/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
neg-sub0N/A
--lowering--.f64N/A
unpow2N/A
accelerator-lowering-fma.f64N/A
unpow2N/A
*-lowering-*.f64N/A
+-rgt-identityN/A
*-commutativeN/A
associate-/l*N/A
accelerator-lowering-fma.f64N/A
Simplified93.7%
if -1.15e-96 < y.im < 3.4e-165Initial program 69.4%
Taylor expanded in y.re around inf
/-lowering-/.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f6495.1
Simplified95.1%
if 3.4e-165 < y.im < 6.99999999999999961e79Initial program 81.4%
Final simplification90.8%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(let* ((t_0 (/ (fma y.re (/ x.im y.im) (- 0.0 x.re)) y.im)))
(if (<= y.im -6e+138)
t_0
(if (<= y.im -1.65e-65)
(fma
y.im
(/ (- 0.0 x.re) (fma y.im y.im (* y.re y.re)))
(/ (* y.re x.im) (fma y.re y.re (* y.im y.im))))
(if (<= y.im 3.4e-165)
(/ (- x.im (* x.re (/ y.im y.re))) y.re)
(if (<= y.im 1.2e+80)
(/ (- (* y.re x.im) (* y.im x.re)) (+ (* y.re y.re) (* y.im y.im)))
t_0))))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = fma(y_46_re, (x_46_im / y_46_im), (0.0 - x_46_re)) / y_46_im;
double tmp;
if (y_46_im <= -6e+138) {
tmp = t_0;
} else if (y_46_im <= -1.65e-65) {
tmp = fma(y_46_im, ((0.0 - x_46_re) / fma(y_46_im, y_46_im, (y_46_re * y_46_re))), ((y_46_re * x_46_im) / fma(y_46_re, y_46_re, (y_46_im * y_46_im))));
} else if (y_46_im <= 3.4e-165) {
tmp = (x_46_im - (x_46_re * (y_46_im / y_46_re))) / y_46_re;
} else if (y_46_im <= 1.2e+80) {
tmp = ((y_46_re * x_46_im) - (y_46_im * x_46_re)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im));
} else {
tmp = t_0;
}
return tmp;
}
function code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = Float64(fma(y_46_re, Float64(x_46_im / y_46_im), Float64(0.0 - x_46_re)) / y_46_im) tmp = 0.0 if (y_46_im <= -6e+138) tmp = t_0; elseif (y_46_im <= -1.65e-65) tmp = fma(y_46_im, Float64(Float64(0.0 - x_46_re) / fma(y_46_im, y_46_im, Float64(y_46_re * y_46_re))), Float64(Float64(y_46_re * x_46_im) / fma(y_46_re, y_46_re, Float64(y_46_im * y_46_im)))); elseif (y_46_im <= 3.4e-165) tmp = Float64(Float64(x_46_im - Float64(x_46_re * Float64(y_46_im / y_46_re))) / y_46_re); elseif (y_46_im <= 1.2e+80) tmp = Float64(Float64(Float64(y_46_re * x_46_im) - Float64(y_46_im * x_46_re)) / Float64(Float64(y_46_re * y_46_re) + Float64(y_46_im * y_46_im))); else tmp = t_0; end return tmp end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := Block[{t$95$0 = N[(N[(y$46$re * N[(x$46$im / y$46$im), $MachinePrecision] + N[(0.0 - x$46$re), $MachinePrecision]), $MachinePrecision] / y$46$im), $MachinePrecision]}, If[LessEqual[y$46$im, -6e+138], t$95$0, If[LessEqual[y$46$im, -1.65e-65], N[(y$46$im * N[(N[(0.0 - x$46$re), $MachinePrecision] / N[(y$46$im * y$46$im + N[(y$46$re * y$46$re), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(y$46$re * x$46$im), $MachinePrecision] / N[(y$46$re * y$46$re + N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[y$46$im, 3.4e-165], N[(N[(x$46$im - N[(x$46$re * N[(y$46$im / y$46$re), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / y$46$re), $MachinePrecision], If[LessEqual[y$46$im, 1.2e+80], N[(N[(N[(y$46$re * x$46$im), $MachinePrecision] - N[(y$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] / N[(N[(y$46$re * y$46$re), $MachinePrecision] + N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\mathsf{fma}\left(y.re, \frac{x.im}{y.im}, 0 - x.re\right)}{y.im}\\
\mathbf{if}\;y.im \leq -6 \cdot 10^{+138}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;y.im \leq -1.65 \cdot 10^{-65}:\\
\;\;\;\;\mathsf{fma}\left(y.im, \frac{0 - x.re}{\mathsf{fma}\left(y.im, y.im, y.re \cdot y.re\right)}, \frac{y.re \cdot x.im}{\mathsf{fma}\left(y.re, y.re, y.im \cdot y.im\right)}\right)\\
\mathbf{elif}\;y.im \leq 3.4 \cdot 10^{-165}:\\
\;\;\;\;\frac{x.im - x.re \cdot \frac{y.im}{y.re}}{y.re}\\
\mathbf{elif}\;y.im \leq 1.2 \cdot 10^{+80}:\\
\;\;\;\;\frac{y.re \cdot x.im - y.im \cdot x.re}{y.re \cdot y.re + y.im \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if y.im < -6.0000000000000002e138 or 1.1999999999999999e80 < y.im Initial program 39.1%
Taylor expanded in y.re around 0
+-commutativeN/A
mul-1-negN/A
unsub-negN/A
unpow2N/A
associate-/r*N/A
div-subN/A
/-lowering-/.f64N/A
sub-negN/A
*-commutativeN/A
associate-/l*N/A
mul-1-negN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f6489.9
Simplified89.9%
if -6.0000000000000002e138 < y.im < -1.6500000000000001e-65Initial program 82.5%
div-subN/A
sub-negN/A
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
distribute-rgt-neg-inN/A
accelerator-lowering-fma.f64N/A
neg-lowering-neg.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f6493.0
Applied egg-rr93.0%
/-lowering-/.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f6493.0
Applied egg-rr93.0%
if -1.6500000000000001e-65 < y.im < 3.4e-165Initial program 69.7%
Taylor expanded in y.re around inf
/-lowering-/.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f6494.1
Simplified94.1%
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f6494.2
Applied egg-rr94.2%
if 3.4e-165 < y.im < 1.1999999999999999e80Initial program 81.4%
Final simplification90.0%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(let* ((t_0
(/ (- (* y.re x.im) (* y.im x.re)) (+ (* y.re y.re) (* y.im y.im))))
(t_1 (/ (fma y.re (/ x.im y.im) (- 0.0 x.re)) y.im)))
(if (<= y.im -9.3e+42)
t_1
(if (<= y.im -3.1e-91)
t_0
(if (<= y.im 3.4e-165)
(/ (- x.im (* x.re (/ y.im y.re))) y.re)
(if (<= y.im 1.6e+80) t_0 t_1))))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = ((y_46_re * x_46_im) - (y_46_im * x_46_re)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im));
double t_1 = fma(y_46_re, (x_46_im / y_46_im), (0.0 - x_46_re)) / y_46_im;
double tmp;
if (y_46_im <= -9.3e+42) {
tmp = t_1;
} else if (y_46_im <= -3.1e-91) {
tmp = t_0;
} else if (y_46_im <= 3.4e-165) {
tmp = (x_46_im - (x_46_re * (y_46_im / y_46_re))) / y_46_re;
} else if (y_46_im <= 1.6e+80) {
tmp = t_0;
} else {
tmp = t_1;
}
return tmp;
}
function code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = Float64(Float64(Float64(y_46_re * x_46_im) - Float64(y_46_im * x_46_re)) / Float64(Float64(y_46_re * y_46_re) + Float64(y_46_im * y_46_im))) t_1 = Float64(fma(y_46_re, Float64(x_46_im / y_46_im), Float64(0.0 - x_46_re)) / y_46_im) tmp = 0.0 if (y_46_im <= -9.3e+42) tmp = t_1; elseif (y_46_im <= -3.1e-91) tmp = t_0; elseif (y_46_im <= 3.4e-165) tmp = Float64(Float64(x_46_im - Float64(x_46_re * Float64(y_46_im / y_46_re))) / y_46_re); elseif (y_46_im <= 1.6e+80) tmp = t_0; else tmp = t_1; end return tmp end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := Block[{t$95$0 = N[(N[(N[(y$46$re * x$46$im), $MachinePrecision] - N[(y$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] / N[(N[(y$46$re * y$46$re), $MachinePrecision] + N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(y$46$re * N[(x$46$im / y$46$im), $MachinePrecision] + N[(0.0 - x$46$re), $MachinePrecision]), $MachinePrecision] / y$46$im), $MachinePrecision]}, If[LessEqual[y$46$im, -9.3e+42], t$95$1, If[LessEqual[y$46$im, -3.1e-91], t$95$0, If[LessEqual[y$46$im, 3.4e-165], N[(N[(x$46$im - N[(x$46$re * N[(y$46$im / y$46$re), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / y$46$re), $MachinePrecision], If[LessEqual[y$46$im, 1.6e+80], t$95$0, t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{y.re \cdot x.im - y.im \cdot x.re}{y.re \cdot y.re + y.im \cdot y.im}\\
t_1 := \frac{\mathsf{fma}\left(y.re, \frac{x.im}{y.im}, 0 - x.re\right)}{y.im}\\
\mathbf{if}\;y.im \leq -9.3 \cdot 10^{+42}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;y.im \leq -3.1 \cdot 10^{-91}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;y.im \leq 3.4 \cdot 10^{-165}:\\
\;\;\;\;\frac{x.im - x.re \cdot \frac{y.im}{y.re}}{y.re}\\
\mathbf{elif}\;y.im \leq 1.6 \cdot 10^{+80}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if y.im < -9.3000000000000005e42 or 1.59999999999999995e80 < y.im Initial program 45.6%
Taylor expanded in y.re around 0
+-commutativeN/A
mul-1-negN/A
unsub-negN/A
unpow2N/A
associate-/r*N/A
div-subN/A
/-lowering-/.f64N/A
sub-negN/A
*-commutativeN/A
associate-/l*N/A
mul-1-negN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f6487.4
Simplified87.4%
if -9.3000000000000005e42 < y.im < -3.09999999999999981e-91 or 3.4e-165 < y.im < 1.59999999999999995e80Initial program 85.6%
if -3.09999999999999981e-91 < y.im < 3.4e-165Initial program 69.1%
Taylor expanded in y.re around inf
/-lowering-/.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f6494.9
Simplified94.9%
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f6494.9
Applied egg-rr94.9%
Final simplification89.3%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(let* ((t_0 (- (* y.re x.im) (* y.im x.re))) (t_1 (/ t_0 (* y.re y.re))))
(if (<= y.re -1.95e+85)
(/ x.im y.re)
(if (<= y.re -4.2e-66)
t_1
(if (<= y.re 3.3e-158)
(- 0.0 (/ x.re y.im))
(if (<= y.re 1.6e-73)
t_1
(if (<= y.re 1.2e+46) (/ t_0 (* y.im y.im)) (/ x.im y.re))))))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = (y_46_re * x_46_im) - (y_46_im * x_46_re);
double t_1 = t_0 / (y_46_re * y_46_re);
double tmp;
if (y_46_re <= -1.95e+85) {
tmp = x_46_im / y_46_re;
} else if (y_46_re <= -4.2e-66) {
tmp = t_1;
} else if (y_46_re <= 3.3e-158) {
tmp = 0.0 - (x_46_re / y_46_im);
} else if (y_46_re <= 1.6e-73) {
tmp = t_1;
} else if (y_46_re <= 1.2e+46) {
tmp = t_0 / (y_46_im * y_46_im);
} else {
tmp = x_46_im / y_46_re;
}
return tmp;
}
real(8) function code(x_46re, x_46im, y_46re, y_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
real(8), intent (in) :: y_46re
real(8), intent (in) :: y_46im
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (y_46re * x_46im) - (y_46im * x_46re)
t_1 = t_0 / (y_46re * y_46re)
if (y_46re <= (-1.95d+85)) then
tmp = x_46im / y_46re
else if (y_46re <= (-4.2d-66)) then
tmp = t_1
else if (y_46re <= 3.3d-158) then
tmp = 0.0d0 - (x_46re / y_46im)
else if (y_46re <= 1.6d-73) then
tmp = t_1
else if (y_46re <= 1.2d+46) then
tmp = t_0 / (y_46im * y_46im)
else
tmp = x_46im / y_46re
end if
code = tmp
end function
public static double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = (y_46_re * x_46_im) - (y_46_im * x_46_re);
double t_1 = t_0 / (y_46_re * y_46_re);
double tmp;
if (y_46_re <= -1.95e+85) {
tmp = x_46_im / y_46_re;
} else if (y_46_re <= -4.2e-66) {
tmp = t_1;
} else if (y_46_re <= 3.3e-158) {
tmp = 0.0 - (x_46_re / y_46_im);
} else if (y_46_re <= 1.6e-73) {
tmp = t_1;
} else if (y_46_re <= 1.2e+46) {
tmp = t_0 / (y_46_im * y_46_im);
} else {
tmp = x_46_im / y_46_re;
}
return tmp;
}
def code(x_46_re, x_46_im, y_46_re, y_46_im): t_0 = (y_46_re * x_46_im) - (y_46_im * x_46_re) t_1 = t_0 / (y_46_re * y_46_re) tmp = 0 if y_46_re <= -1.95e+85: tmp = x_46_im / y_46_re elif y_46_re <= -4.2e-66: tmp = t_1 elif y_46_re <= 3.3e-158: tmp = 0.0 - (x_46_re / y_46_im) elif y_46_re <= 1.6e-73: tmp = t_1 elif y_46_re <= 1.2e+46: tmp = t_0 / (y_46_im * y_46_im) else: tmp = x_46_im / y_46_re return tmp
function code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = Float64(Float64(y_46_re * x_46_im) - Float64(y_46_im * x_46_re)) t_1 = Float64(t_0 / Float64(y_46_re * y_46_re)) tmp = 0.0 if (y_46_re <= -1.95e+85) tmp = Float64(x_46_im / y_46_re); elseif (y_46_re <= -4.2e-66) tmp = t_1; elseif (y_46_re <= 3.3e-158) tmp = Float64(0.0 - Float64(x_46_re / y_46_im)); elseif (y_46_re <= 1.6e-73) tmp = t_1; elseif (y_46_re <= 1.2e+46) tmp = Float64(t_0 / Float64(y_46_im * y_46_im)); else tmp = Float64(x_46_im / y_46_re); end return tmp end
function tmp_2 = code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = (y_46_re * x_46_im) - (y_46_im * x_46_re); t_1 = t_0 / (y_46_re * y_46_re); tmp = 0.0; if (y_46_re <= -1.95e+85) tmp = x_46_im / y_46_re; elseif (y_46_re <= -4.2e-66) tmp = t_1; elseif (y_46_re <= 3.3e-158) tmp = 0.0 - (x_46_re / y_46_im); elseif (y_46_re <= 1.6e-73) tmp = t_1; elseif (y_46_re <= 1.2e+46) tmp = t_0 / (y_46_im * y_46_im); else tmp = x_46_im / y_46_re; end tmp_2 = tmp; end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := Block[{t$95$0 = N[(N[(y$46$re * x$46$im), $MachinePrecision] - N[(y$46$im * x$46$re), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 / N[(y$46$re * y$46$re), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[y$46$re, -1.95e+85], N[(x$46$im / y$46$re), $MachinePrecision], If[LessEqual[y$46$re, -4.2e-66], t$95$1, If[LessEqual[y$46$re, 3.3e-158], N[(0.0 - N[(x$46$re / y$46$im), $MachinePrecision]), $MachinePrecision], If[LessEqual[y$46$re, 1.6e-73], t$95$1, If[LessEqual[y$46$re, 1.2e+46], N[(t$95$0 / N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision], N[(x$46$im / y$46$re), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := y.re \cdot x.im - y.im \cdot x.re\\
t_1 := \frac{t\_0}{y.re \cdot y.re}\\
\mathbf{if}\;y.re \leq -1.95 \cdot 10^{+85}:\\
\;\;\;\;\frac{x.im}{y.re}\\
\mathbf{elif}\;y.re \leq -4.2 \cdot 10^{-66}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;y.re \leq 3.3 \cdot 10^{-158}:\\
\;\;\;\;0 - \frac{x.re}{y.im}\\
\mathbf{elif}\;y.re \leq 1.6 \cdot 10^{-73}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;y.re \leq 1.2 \cdot 10^{+46}:\\
\;\;\;\;\frac{t\_0}{y.im \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{y.re}\\
\end{array}
\end{array}
if y.re < -1.95000000000000017e85 or 1.20000000000000004e46 < y.re Initial program 49.3%
Taylor expanded in y.re around inf
/-lowering-/.f6477.4
Simplified77.4%
if -1.95000000000000017e85 < y.re < -4.2000000000000001e-66 or 3.3000000000000002e-158 < y.re < 1.59999999999999993e-73Initial program 75.7%
Taylor expanded in y.re around inf
unpow2N/A
*-lowering-*.f6460.3
Simplified60.3%
if -4.2000000000000001e-66 < y.re < 3.3000000000000002e-158Initial program 68.9%
Taylor expanded in y.re around 0
Simplified87.0%
Taylor expanded in y.re around 0
mul-1-negN/A
neg-sub0N/A
--lowering--.f6476.2
Simplified76.2%
sub0-negN/A
neg-lowering-neg.f6476.2
Applied egg-rr76.2%
if 1.59999999999999993e-73 < y.re < 1.20000000000000004e46Initial program 96.0%
Taylor expanded in y.re around 0
unpow2N/A
*-lowering-*.f6467.6
Simplified67.6%
Final simplification72.5%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(if (<= y.re -4.8e+105)
(/ x.im y.re)
(if (<= y.re -3.1e-127)
(* x.im (/ y.re (fma y.re y.re (* y.im y.im))))
(if (<= y.re 1e-73)
(- 0.0 (/ x.re y.im))
(if (<= y.re 2.5e+45)
(/ (- (* y.re x.im) (* y.im x.re)) (* y.im y.im))
(/ x.im y.re))))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double tmp;
if (y_46_re <= -4.8e+105) {
tmp = x_46_im / y_46_re;
} else if (y_46_re <= -3.1e-127) {
tmp = x_46_im * (y_46_re / fma(y_46_re, y_46_re, (y_46_im * y_46_im)));
} else if (y_46_re <= 1e-73) {
tmp = 0.0 - (x_46_re / y_46_im);
} else if (y_46_re <= 2.5e+45) {
tmp = ((y_46_re * x_46_im) - (y_46_im * x_46_re)) / (y_46_im * y_46_im);
} else {
tmp = x_46_im / y_46_re;
}
return tmp;
}
function code(x_46_re, x_46_im, y_46_re, y_46_im) tmp = 0.0 if (y_46_re <= -4.8e+105) tmp = Float64(x_46_im / y_46_re); elseif (y_46_re <= -3.1e-127) tmp = Float64(x_46_im * Float64(y_46_re / fma(y_46_re, y_46_re, Float64(y_46_im * y_46_im)))); elseif (y_46_re <= 1e-73) tmp = Float64(0.0 - Float64(x_46_re / y_46_im)); elseif (y_46_re <= 2.5e+45) tmp = Float64(Float64(Float64(y_46_re * x_46_im) - Float64(y_46_im * x_46_re)) / Float64(y_46_im * y_46_im)); else tmp = Float64(x_46_im / y_46_re); end return tmp end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := If[LessEqual[y$46$re, -4.8e+105], N[(x$46$im / y$46$re), $MachinePrecision], If[LessEqual[y$46$re, -3.1e-127], N[(x$46$im * N[(y$46$re / N[(y$46$re * y$46$re + N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[y$46$re, 1e-73], N[(0.0 - N[(x$46$re / y$46$im), $MachinePrecision]), $MachinePrecision], If[LessEqual[y$46$re, 2.5e+45], N[(N[(N[(y$46$re * x$46$im), $MachinePrecision] - N[(y$46$im * x$46$re), $MachinePrecision]), $MachinePrecision] / N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision], N[(x$46$im / y$46$re), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y.re \leq -4.8 \cdot 10^{+105}:\\
\;\;\;\;\frac{x.im}{y.re}\\
\mathbf{elif}\;y.re \leq -3.1 \cdot 10^{-127}:\\
\;\;\;\;x.im \cdot \frac{y.re}{\mathsf{fma}\left(y.re, y.re, y.im \cdot y.im\right)}\\
\mathbf{elif}\;y.re \leq 10^{-73}:\\
\;\;\;\;0 - \frac{x.re}{y.im}\\
\mathbf{elif}\;y.re \leq 2.5 \cdot 10^{+45}:\\
\;\;\;\;\frac{y.re \cdot x.im - y.im \cdot x.re}{y.im \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{y.re}\\
\end{array}
\end{array}
if y.re < -4.7999999999999995e105 or 2.5e45 < y.re Initial program 49.7%
Taylor expanded in y.re around inf
/-lowering-/.f6477.7
Simplified77.7%
if -4.7999999999999995e105 < y.re < -3.1e-127Initial program 78.7%
div-subN/A
sub-negN/A
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
distribute-rgt-neg-inN/A
accelerator-lowering-fma.f64N/A
neg-lowering-neg.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f6473.0
Applied egg-rr73.0%
/-lowering-/.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f6473.0
Applied egg-rr73.0%
Taylor expanded in x.re around 0
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
unpow2N/A
accelerator-lowering-fma.f64N/A
unpow2N/A
*-lowering-*.f6455.1
Simplified55.1%
if -3.1e-127 < y.re < 9.99999999999999997e-74Initial program 66.2%
Taylor expanded in y.re around 0
Simplified80.2%
Taylor expanded in y.re around 0
mul-1-negN/A
neg-sub0N/A
--lowering--.f6471.1
Simplified71.1%
sub0-negN/A
neg-lowering-neg.f6471.1
Applied egg-rr71.1%
if 9.99999999999999997e-74 < y.re < 2.5e45Initial program 96.2%
Taylor expanded in y.re around 0
unpow2N/A
*-lowering-*.f6465.3
Simplified65.3%
Final simplification70.0%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(let* ((t_0 (/ (fma y.re (/ x.im y.im) (- 0.0 x.re)) y.im)))
(if (<= y.im -6200000.0)
t_0
(if (<= y.im 42.0) (/ (- x.im (/ (* y.im x.re) y.re)) y.re) t_0))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = fma(y_46_re, (x_46_im / y_46_im), (0.0 - x_46_re)) / y_46_im;
double tmp;
if (y_46_im <= -6200000.0) {
tmp = t_0;
} else if (y_46_im <= 42.0) {
tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re;
} else {
tmp = t_0;
}
return tmp;
}
function code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = Float64(fma(y_46_re, Float64(x_46_im / y_46_im), Float64(0.0 - x_46_re)) / y_46_im) tmp = 0.0 if (y_46_im <= -6200000.0) tmp = t_0; elseif (y_46_im <= 42.0) tmp = Float64(Float64(x_46_im - Float64(Float64(y_46_im * x_46_re) / y_46_re)) / y_46_re); else tmp = t_0; end return tmp end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := Block[{t$95$0 = N[(N[(y$46$re * N[(x$46$im / y$46$im), $MachinePrecision] + N[(0.0 - x$46$re), $MachinePrecision]), $MachinePrecision] / y$46$im), $MachinePrecision]}, If[LessEqual[y$46$im, -6200000.0], t$95$0, If[LessEqual[y$46$im, 42.0], N[(N[(x$46$im - N[(N[(y$46$im * x$46$re), $MachinePrecision] / y$46$re), $MachinePrecision]), $MachinePrecision] / y$46$re), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\mathsf{fma}\left(y.re, \frac{x.im}{y.im}, 0 - x.re\right)}{y.im}\\
\mathbf{if}\;y.im \leq -6200000:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;y.im \leq 42:\\
\;\;\;\;\frac{x.im - \frac{y.im \cdot x.re}{y.re}}{y.re}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if y.im < -6.2e6 or 42 < y.im Initial program 53.7%
Taylor expanded in y.re around 0
+-commutativeN/A
mul-1-negN/A
unsub-negN/A
unpow2N/A
associate-/r*N/A
div-subN/A
/-lowering-/.f64N/A
sub-negN/A
*-commutativeN/A
associate-/l*N/A
mul-1-negN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f6482.4
Simplified82.4%
if -6.2e6 < y.im < 42Initial program 76.2%
Taylor expanded in y.re around inf
/-lowering-/.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f6486.5
Simplified86.5%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(let* ((t_0 (/ (fma x.im (/ y.re y.im) (- 0.0 x.re)) y.im)))
(if (<= y.im -64000.0)
t_0
(if (<= y.im 20.0) (/ (- x.im (/ (* y.im x.re) y.re)) y.re) t_0))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = fma(x_46_im, (y_46_re / y_46_im), (0.0 - x_46_re)) / y_46_im;
double tmp;
if (y_46_im <= -64000.0) {
tmp = t_0;
} else if (y_46_im <= 20.0) {
tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re;
} else {
tmp = t_0;
}
return tmp;
}
function code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = Float64(fma(x_46_im, Float64(y_46_re / y_46_im), Float64(0.0 - x_46_re)) / y_46_im) tmp = 0.0 if (y_46_im <= -64000.0) tmp = t_0; elseif (y_46_im <= 20.0) tmp = Float64(Float64(x_46_im - Float64(Float64(y_46_im * x_46_re) / y_46_re)) / y_46_re); else tmp = t_0; end return tmp end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := Block[{t$95$0 = N[(N[(x$46$im * N[(y$46$re / y$46$im), $MachinePrecision] + N[(0.0 - x$46$re), $MachinePrecision]), $MachinePrecision] / y$46$im), $MachinePrecision]}, If[LessEqual[y$46$im, -64000.0], t$95$0, If[LessEqual[y$46$im, 20.0], N[(N[(x$46$im - N[(N[(y$46$im * x$46$re), $MachinePrecision] / y$46$re), $MachinePrecision]), $MachinePrecision] / y$46$re), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\mathsf{fma}\left(x.im, \frac{y.re}{y.im}, 0 - x.re\right)}{y.im}\\
\mathbf{if}\;y.im \leq -64000:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;y.im \leq 20:\\
\;\;\;\;\frac{x.im - \frac{y.im \cdot x.re}{y.re}}{y.re}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if y.im < -64000 or 20 < y.im Initial program 53.7%
div-invN/A
flip3--N/A
clear-numN/A
frac-2negN/A
metadata-evalN/A
frac-timesN/A
metadata-evalN/A
/-lowering-/.f64N/A
Applied egg-rr53.5%
Taylor expanded in y.im around inf
/-lowering-/.f64N/A
+-commutativeN/A
associate-/l*N/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f6481.3
Simplified81.3%
if -64000 < y.im < 20Initial program 76.2%
Taylor expanded in y.re around inf
/-lowering-/.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f6486.5
Simplified86.5%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(let* ((t_0 (/ (- (/ (* y.re x.im) y.im) x.re) y.im)))
(if (<= y.im -55000000.0)
t_0
(if (<= y.im 12.0) (/ (- x.im (/ (* y.im x.re) y.re)) y.re) t_0))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = (((y_46_re * x_46_im) / y_46_im) - x_46_re) / y_46_im;
double tmp;
if (y_46_im <= -55000000.0) {
tmp = t_0;
} else if (y_46_im <= 12.0) {
tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(x_46re, x_46im, y_46re, y_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
real(8), intent (in) :: y_46re
real(8), intent (in) :: y_46im
real(8) :: t_0
real(8) :: tmp
t_0 = (((y_46re * x_46im) / y_46im) - x_46re) / y_46im
if (y_46im <= (-55000000.0d0)) then
tmp = t_0
else if (y_46im <= 12.0d0) then
tmp = (x_46im - ((y_46im * x_46re) / y_46re)) / y_46re
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = (((y_46_re * x_46_im) / y_46_im) - x_46_re) / y_46_im;
double tmp;
if (y_46_im <= -55000000.0) {
tmp = t_0;
} else if (y_46_im <= 12.0) {
tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re;
} else {
tmp = t_0;
}
return tmp;
}
def code(x_46_re, x_46_im, y_46_re, y_46_im): t_0 = (((y_46_re * x_46_im) / y_46_im) - x_46_re) / y_46_im tmp = 0 if y_46_im <= -55000000.0: tmp = t_0 elif y_46_im <= 12.0: tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re else: tmp = t_0 return tmp
function code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = Float64(Float64(Float64(Float64(y_46_re * x_46_im) / y_46_im) - x_46_re) / y_46_im) tmp = 0.0 if (y_46_im <= -55000000.0) tmp = t_0; elseif (y_46_im <= 12.0) tmp = Float64(Float64(x_46_im - Float64(Float64(y_46_im * x_46_re) / y_46_re)) / y_46_re); else tmp = t_0; end return tmp end
function tmp_2 = code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = (((y_46_re * x_46_im) / y_46_im) - x_46_re) / y_46_im; tmp = 0.0; if (y_46_im <= -55000000.0) tmp = t_0; elseif (y_46_im <= 12.0) tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re; else tmp = t_0; end tmp_2 = tmp; end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := Block[{t$95$0 = N[(N[(N[(N[(y$46$re * x$46$im), $MachinePrecision] / y$46$im), $MachinePrecision] - x$46$re), $MachinePrecision] / y$46$im), $MachinePrecision]}, If[LessEqual[y$46$im, -55000000.0], t$95$0, If[LessEqual[y$46$im, 12.0], N[(N[(x$46$im - N[(N[(y$46$im * x$46$re), $MachinePrecision] / y$46$re), $MachinePrecision]), $MachinePrecision] / y$46$re), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\frac{y.re \cdot x.im}{y.im} - x.re}{y.im}\\
\mathbf{if}\;y.im \leq -55000000:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;y.im \leq 12:\\
\;\;\;\;\frac{x.im - \frac{y.im \cdot x.re}{y.re}}{y.re}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if y.im < -5.5e7 or 12 < y.im Initial program 53.7%
Taylor expanded in y.re around 0
Simplified73.3%
Taylor expanded in y.re around 0
*-lowering-*.f6476.7
Simplified76.7%
if -5.5e7 < y.im < 12Initial program 76.2%
Taylor expanded in y.re around inf
/-lowering-/.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f6486.5
Simplified86.5%
Final simplification81.9%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(let* ((t_0 (- 0.0 (/ x.re y.im))))
(if (<= y.im -1.35e+42)
t_0
(if (<= y.im 5.8e+39) (/ (- x.im (/ (* y.im x.re) y.re)) y.re) t_0))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = 0.0 - (x_46_re / y_46_im);
double tmp;
if (y_46_im <= -1.35e+42) {
tmp = t_0;
} else if (y_46_im <= 5.8e+39) {
tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(x_46re, x_46im, y_46re, y_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
real(8), intent (in) :: y_46re
real(8), intent (in) :: y_46im
real(8) :: t_0
real(8) :: tmp
t_0 = 0.0d0 - (x_46re / y_46im)
if (y_46im <= (-1.35d+42)) then
tmp = t_0
else if (y_46im <= 5.8d+39) then
tmp = (x_46im - ((y_46im * x_46re) / y_46re)) / y_46re
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = 0.0 - (x_46_re / y_46_im);
double tmp;
if (y_46_im <= -1.35e+42) {
tmp = t_0;
} else if (y_46_im <= 5.8e+39) {
tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re;
} else {
tmp = t_0;
}
return tmp;
}
def code(x_46_re, x_46_im, y_46_re, y_46_im): t_0 = 0.0 - (x_46_re / y_46_im) tmp = 0 if y_46_im <= -1.35e+42: tmp = t_0 elif y_46_im <= 5.8e+39: tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re else: tmp = t_0 return tmp
function code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = Float64(0.0 - Float64(x_46_re / y_46_im)) tmp = 0.0 if (y_46_im <= -1.35e+42) tmp = t_0; elseif (y_46_im <= 5.8e+39) tmp = Float64(Float64(x_46_im - Float64(Float64(y_46_im * x_46_re) / y_46_re)) / y_46_re); else tmp = t_0; end return tmp end
function tmp_2 = code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = 0.0 - (x_46_re / y_46_im); tmp = 0.0; if (y_46_im <= -1.35e+42) tmp = t_0; elseif (y_46_im <= 5.8e+39) tmp = (x_46_im - ((y_46_im * x_46_re) / y_46_re)) / y_46_re; else tmp = t_0; end tmp_2 = tmp; end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := Block[{t$95$0 = N[(0.0 - N[(x$46$re / y$46$im), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[y$46$im, -1.35e+42], t$95$0, If[LessEqual[y$46$im, 5.8e+39], N[(N[(x$46$im - N[(N[(y$46$im * x$46$re), $MachinePrecision] / y$46$re), $MachinePrecision]), $MachinePrecision] / y$46$re), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0 - \frac{x.re}{y.im}\\
\mathbf{if}\;y.im \leq -1.35 \cdot 10^{+42}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;y.im \leq 5.8 \cdot 10^{+39}:\\
\;\;\;\;\frac{x.im - \frac{y.im \cdot x.re}{y.re}}{y.re}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if y.im < -1.35e42 or 5.80000000000000059e39 < y.im Initial program 49.8%
Taylor expanded in y.re around 0
Simplified76.6%
Taylor expanded in y.re around 0
mul-1-negN/A
neg-sub0N/A
--lowering--.f6473.1
Simplified73.1%
sub0-negN/A
neg-lowering-neg.f6473.1
Applied egg-rr73.1%
if -1.35e42 < y.im < 5.80000000000000059e39Initial program 75.9%
Taylor expanded in y.re around inf
/-lowering-/.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f6481.4
Simplified81.4%
Final simplification78.1%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(let* ((t_0 (- 0.0 (/ x.re y.im))))
(if (<= y.im -2.55e+42)
t_0
(if (<= y.im 9e+41) (/ (- x.im (* x.re (/ y.im y.re))) y.re) t_0))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = 0.0 - (x_46_re / y_46_im);
double tmp;
if (y_46_im <= -2.55e+42) {
tmp = t_0;
} else if (y_46_im <= 9e+41) {
tmp = (x_46_im - (x_46_re * (y_46_im / y_46_re))) / y_46_re;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(x_46re, x_46im, y_46re, y_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
real(8), intent (in) :: y_46re
real(8), intent (in) :: y_46im
real(8) :: t_0
real(8) :: tmp
t_0 = 0.0d0 - (x_46re / y_46im)
if (y_46im <= (-2.55d+42)) then
tmp = t_0
else if (y_46im <= 9d+41) then
tmp = (x_46im - (x_46re * (y_46im / y_46re))) / y_46re
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double t_0 = 0.0 - (x_46_re / y_46_im);
double tmp;
if (y_46_im <= -2.55e+42) {
tmp = t_0;
} else if (y_46_im <= 9e+41) {
tmp = (x_46_im - (x_46_re * (y_46_im / y_46_re))) / y_46_re;
} else {
tmp = t_0;
}
return tmp;
}
def code(x_46_re, x_46_im, y_46_re, y_46_im): t_0 = 0.0 - (x_46_re / y_46_im) tmp = 0 if y_46_im <= -2.55e+42: tmp = t_0 elif y_46_im <= 9e+41: tmp = (x_46_im - (x_46_re * (y_46_im / y_46_re))) / y_46_re else: tmp = t_0 return tmp
function code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = Float64(0.0 - Float64(x_46_re / y_46_im)) tmp = 0.0 if (y_46_im <= -2.55e+42) tmp = t_0; elseif (y_46_im <= 9e+41) tmp = Float64(Float64(x_46_im - Float64(x_46_re * Float64(y_46_im / y_46_re))) / y_46_re); else tmp = t_0; end return tmp end
function tmp_2 = code(x_46_re, x_46_im, y_46_re, y_46_im) t_0 = 0.0 - (x_46_re / y_46_im); tmp = 0.0; if (y_46_im <= -2.55e+42) tmp = t_0; elseif (y_46_im <= 9e+41) tmp = (x_46_im - (x_46_re * (y_46_im / y_46_re))) / y_46_re; else tmp = t_0; end tmp_2 = tmp; end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := Block[{t$95$0 = N[(0.0 - N[(x$46$re / y$46$im), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[y$46$im, -2.55e+42], t$95$0, If[LessEqual[y$46$im, 9e+41], N[(N[(x$46$im - N[(x$46$re * N[(y$46$im / y$46$re), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / y$46$re), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0 - \frac{x.re}{y.im}\\
\mathbf{if}\;y.im \leq -2.55 \cdot 10^{+42}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;y.im \leq 9 \cdot 10^{+41}:\\
\;\;\;\;\frac{x.im - x.re \cdot \frac{y.im}{y.re}}{y.re}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if y.im < -2.55e42 or 9.0000000000000002e41 < y.im Initial program 49.8%
Taylor expanded in y.re around 0
Simplified76.6%
Taylor expanded in y.re around 0
mul-1-negN/A
neg-sub0N/A
--lowering--.f6473.1
Simplified73.1%
sub0-negN/A
neg-lowering-neg.f6473.1
Applied egg-rr73.1%
if -2.55e42 < y.im < 9.0000000000000002e41Initial program 75.9%
Taylor expanded in y.re around inf
/-lowering-/.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f6481.4
Simplified81.4%
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f6481.4
Applied egg-rr81.4%
Final simplification78.1%
(FPCore (x.re x.im y.re y.im)
:precision binary64
(if (<= y.re -1.9e+106)
(/ x.im y.re)
(if (<= y.re -3.2e-127)
(* x.im (/ y.re (fma y.re y.re (* y.im y.im))))
(if (<= y.re 1.9e+45) (- 0.0 (/ x.re y.im)) (/ x.im y.re)))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double tmp;
if (y_46_re <= -1.9e+106) {
tmp = x_46_im / y_46_re;
} else if (y_46_re <= -3.2e-127) {
tmp = x_46_im * (y_46_re / fma(y_46_re, y_46_re, (y_46_im * y_46_im)));
} else if (y_46_re <= 1.9e+45) {
tmp = 0.0 - (x_46_re / y_46_im);
} else {
tmp = x_46_im / y_46_re;
}
return tmp;
}
function code(x_46_re, x_46_im, y_46_re, y_46_im) tmp = 0.0 if (y_46_re <= -1.9e+106) tmp = Float64(x_46_im / y_46_re); elseif (y_46_re <= -3.2e-127) tmp = Float64(x_46_im * Float64(y_46_re / fma(y_46_re, y_46_re, Float64(y_46_im * y_46_im)))); elseif (y_46_re <= 1.9e+45) tmp = Float64(0.0 - Float64(x_46_re / y_46_im)); else tmp = Float64(x_46_im / y_46_re); end return tmp end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := If[LessEqual[y$46$re, -1.9e+106], N[(x$46$im / y$46$re), $MachinePrecision], If[LessEqual[y$46$re, -3.2e-127], N[(x$46$im * N[(y$46$re / N[(y$46$re * y$46$re + N[(y$46$im * y$46$im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[y$46$re, 1.9e+45], N[(0.0 - N[(x$46$re / y$46$im), $MachinePrecision]), $MachinePrecision], N[(x$46$im / y$46$re), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y.re \leq -1.9 \cdot 10^{+106}:\\
\;\;\;\;\frac{x.im}{y.re}\\
\mathbf{elif}\;y.re \leq -3.2 \cdot 10^{-127}:\\
\;\;\;\;x.im \cdot \frac{y.re}{\mathsf{fma}\left(y.re, y.re, y.im \cdot y.im\right)}\\
\mathbf{elif}\;y.re \leq 1.9 \cdot 10^{+45}:\\
\;\;\;\;0 - \frac{x.re}{y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{y.re}\\
\end{array}
\end{array}
if y.re < -1.8999999999999999e106 or 1.9000000000000001e45 < y.re Initial program 49.7%
Taylor expanded in y.re around inf
/-lowering-/.f6477.7
Simplified77.7%
if -1.8999999999999999e106 < y.re < -3.20000000000000017e-127Initial program 78.7%
div-subN/A
sub-negN/A
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
distribute-rgt-neg-inN/A
accelerator-lowering-fma.f64N/A
neg-lowering-neg.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f6473.0
Applied egg-rr73.0%
/-lowering-/.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f6473.0
Applied egg-rr73.0%
Taylor expanded in x.re around 0
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
unpow2N/A
accelerator-lowering-fma.f64N/A
unpow2N/A
*-lowering-*.f6455.1
Simplified55.1%
if -3.20000000000000017e-127 < y.re < 1.9000000000000001e45Initial program 73.3%
Taylor expanded in y.re around 0
Simplified77.5%
Taylor expanded in y.re around 0
mul-1-negN/A
neg-sub0N/A
--lowering--.f6465.6
Simplified65.6%
sub0-negN/A
neg-lowering-neg.f6465.6
Applied egg-rr65.6%
Final simplification68.1%
(FPCore (x.re x.im y.re y.im) :precision binary64 (if (<= y.re -125000.0) (/ x.im y.re) (if (<= y.re 2.4e+46) (- 0.0 (/ x.re y.im)) (/ x.im y.re))))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double tmp;
if (y_46_re <= -125000.0) {
tmp = x_46_im / y_46_re;
} else if (y_46_re <= 2.4e+46) {
tmp = 0.0 - (x_46_re / y_46_im);
} else {
tmp = x_46_im / y_46_re;
}
return tmp;
}
real(8) function code(x_46re, x_46im, y_46re, y_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
real(8), intent (in) :: y_46re
real(8), intent (in) :: y_46im
real(8) :: tmp
if (y_46re <= (-125000.0d0)) then
tmp = x_46im / y_46re
else if (y_46re <= 2.4d+46) then
tmp = 0.0d0 - (x_46re / y_46im)
else
tmp = x_46im / y_46re
end if
code = tmp
end function
public static double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double tmp;
if (y_46_re <= -125000.0) {
tmp = x_46_im / y_46_re;
} else if (y_46_re <= 2.4e+46) {
tmp = 0.0 - (x_46_re / y_46_im);
} else {
tmp = x_46_im / y_46_re;
}
return tmp;
}
def code(x_46_re, x_46_im, y_46_re, y_46_im): tmp = 0 if y_46_re <= -125000.0: tmp = x_46_im / y_46_re elif y_46_re <= 2.4e+46: tmp = 0.0 - (x_46_re / y_46_im) else: tmp = x_46_im / y_46_re return tmp
function code(x_46_re, x_46_im, y_46_re, y_46_im) tmp = 0.0 if (y_46_re <= -125000.0) tmp = Float64(x_46_im / y_46_re); elseif (y_46_re <= 2.4e+46) tmp = Float64(0.0 - Float64(x_46_re / y_46_im)); else tmp = Float64(x_46_im / y_46_re); end return tmp end
function tmp_2 = code(x_46_re, x_46_im, y_46_re, y_46_im) tmp = 0.0; if (y_46_re <= -125000.0) tmp = x_46_im / y_46_re; elseif (y_46_re <= 2.4e+46) tmp = 0.0 - (x_46_re / y_46_im); else tmp = x_46_im / y_46_re; end tmp_2 = tmp; end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := If[LessEqual[y$46$re, -125000.0], N[(x$46$im / y$46$re), $MachinePrecision], If[LessEqual[y$46$re, 2.4e+46], N[(0.0 - N[(x$46$re / y$46$im), $MachinePrecision]), $MachinePrecision], N[(x$46$im / y$46$re), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y.re \leq -125000:\\
\;\;\;\;\frac{x.im}{y.re}\\
\mathbf{elif}\;y.re \leq 2.4 \cdot 10^{+46}:\\
\;\;\;\;0 - \frac{x.re}{y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{y.re}\\
\end{array}
\end{array}
if y.re < -125000 or 2.40000000000000008e46 < y.re Initial program 55.2%
Taylor expanded in y.re around inf
/-lowering-/.f6474.4
Simplified74.4%
if -125000 < y.re < 2.40000000000000008e46Initial program 73.7%
Taylor expanded in y.re around 0
Simplified73.2%
Taylor expanded in y.re around 0
mul-1-negN/A
neg-sub0N/A
--lowering--.f6460.3
Simplified60.3%
sub0-negN/A
neg-lowering-neg.f6460.3
Applied egg-rr60.3%
Final simplification66.4%
(FPCore (x.re x.im y.re y.im) :precision binary64 (/ x.im y.re))
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
return x_46_im / y_46_re;
}
real(8) function code(x_46re, x_46im, y_46re, y_46im)
real(8), intent (in) :: x_46re
real(8), intent (in) :: x_46im
real(8), intent (in) :: y_46re
real(8), intent (in) :: y_46im
code = x_46im / y_46re
end function
public static double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
return x_46_im / y_46_re;
}
def code(x_46_re, x_46_im, y_46_re, y_46_im): return x_46_im / y_46_re
function code(x_46_re, x_46_im, y_46_re, y_46_im) return Float64(x_46_im / y_46_re) end
function tmp = code(x_46_re, x_46_im, y_46_re, y_46_im) tmp = x_46_im / y_46_re; end
code[x$46$re_, x$46$im_, y$46$re_, y$46$im_] := N[(x$46$im / y$46$re), $MachinePrecision]
\begin{array}{l}
\\
\frac{x.im}{y.re}
\end{array}
Initial program 65.6%
Taylor expanded in y.re around inf
/-lowering-/.f6442.7
Simplified42.7%
herbie shell --seed 2024196
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, imaginary part"
:precision binary64
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))