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 r18557 = x_re;
double r18558 = r18557 * r18557;
double r18559 = x_im;
double r18560 = r18559 * r18559;
double r18561 = r18558 + r18560;
double r18562 = sqrt(r18561);
double r18563 = log(r18562);
double r18564 = y_re;
double r18565 = r18563 * r18564;
double r18566 = atan2(r18559, r18557);
double r18567 = y_im;
double r18568 = r18566 * r18567;
double r18569 = r18565 - r18568;
double r18570 = exp(r18569);
double r18571 = r18563 * r18567;
double r18572 = r18566 * r18564;
double r18573 = r18571 + r18572;
double r18574 = sin(r18573);
double r18575 = r18570 * r18574;
return r18575;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r18576 = x_re;
double r18577 = 3.7343576615001e-310;
bool r18578 = r18576 <= r18577;
double r18579 = r18576 * r18576;
double r18580 = x_im;
double r18581 = r18580 * r18580;
double r18582 = r18579 + r18581;
double r18583 = sqrt(r18582);
double r18584 = log(r18583);
double r18585 = y_re;
double r18586 = r18584 * r18585;
double r18587 = atan2(r18580, r18576);
double r18588 = y_im;
double r18589 = r18587 * r18588;
double r18590 = r18586 - r18589;
double r18591 = exp(r18590);
double r18592 = -1.0;
double r18593 = r18592 * r18576;
double r18594 = log(r18593);
double r18595 = r18594 * r18588;
double r18596 = r18587 * r18585;
double r18597 = r18595 + r18596;
double r18598 = sin(r18597);
double r18599 = r18591 * r18598;
double r18600 = 1.0;
double r18601 = r18600 / r18576;
double r18602 = log(r18601);
double r18603 = r18588 * r18602;
double r18604 = r18596 - r18603;
double r18605 = sin(r18604);
double r18606 = r18591 * r18605;
double r18607 = r18578 ? r18599 : r18606;
return r18607;
}



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)))))