e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\begin{array}{l}
\mathbf{if}\;x.re \le 3.7343576615001 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\log \left(-1 \cdot x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{else}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re - y.im \cdot \log \left(\frac{1}{x.re}\right)\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r18589 = x_re;
double r18590 = r18589 * r18589;
double r18591 = x_im;
double r18592 = r18591 * r18591;
double r18593 = r18590 + r18592;
double r18594 = sqrt(r18593);
double r18595 = log(r18594);
double r18596 = y_re;
double r18597 = r18595 * r18596;
double r18598 = atan2(r18591, r18589);
double r18599 = y_im;
double r18600 = r18598 * r18599;
double r18601 = r18597 - r18600;
double r18602 = exp(r18601);
double r18603 = r18595 * r18599;
double r18604 = r18598 * r18596;
double r18605 = r18603 + r18604;
double r18606 = sin(r18605);
double r18607 = r18602 * r18606;
return r18607;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r18608 = x_re;
double r18609 = 3.7343576615001e-310;
bool r18610 = r18608 <= r18609;
double r18611 = r18608 * r18608;
double r18612 = x_im;
double r18613 = r18612 * r18612;
double r18614 = r18611 + r18613;
double r18615 = sqrt(r18614);
double r18616 = log(r18615);
double r18617 = y_re;
double r18618 = r18616 * r18617;
double r18619 = atan2(r18612, r18608);
double r18620 = y_im;
double r18621 = r18619 * r18620;
double r18622 = r18618 - r18621;
double r18623 = exp(r18622);
double r18624 = -1.0;
double r18625 = r18624 * r18608;
double r18626 = log(r18625);
double r18627 = r18626 * r18620;
double r18628 = r18619 * r18617;
double r18629 = r18627 + r18628;
double r18630 = sin(r18629);
double r18631 = r18623 * r18630;
double r18632 = 1.0;
double r18633 = r18632 / r18608;
double r18634 = log(r18633);
double r18635 = r18620 * r18634;
double r18636 = r18628 - r18635;
double r18637 = sin(r18636);
double r18638 = r18623 * r18637;
double r18639 = r18610 ? r18631 : r18638;
return r18639;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 3.7343576615001e-310Initial program 31.1
Taylor expanded around -inf 19.7
if 3.7343576615001e-310 < x.re Initial program 34.2
Taylor expanded around inf 24.2
Final simplification22.0
herbie shell --seed 2020060
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
:precision binary64
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))