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 -5.20017416521052886574578336732339901413 \cdot 10^{-309}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot \left(\sqrt[3]{y.im} \cdot \sqrt[3]{y.im}\right)\right) \cdot \sqrt[3]{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)\\
\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 r17571 = x_re;
double r17572 = r17571 * r17571;
double r17573 = x_im;
double r17574 = r17573 * r17573;
double r17575 = r17572 + r17574;
double r17576 = sqrt(r17575);
double r17577 = log(r17576);
double r17578 = y_re;
double r17579 = r17577 * r17578;
double r17580 = atan2(r17573, r17571);
double r17581 = y_im;
double r17582 = r17580 * r17581;
double r17583 = r17579 - r17582;
double r17584 = exp(r17583);
double r17585 = r17577 * r17581;
double r17586 = r17580 * r17578;
double r17587 = r17585 + r17586;
double r17588 = sin(r17587);
double r17589 = r17584 * r17588;
return r17589;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17590 = x_re;
double r17591 = -5.20017416521053e-309;
bool r17592 = r17590 <= r17591;
double r17593 = r17590 * r17590;
double r17594 = x_im;
double r17595 = r17594 * r17594;
double r17596 = r17593 + r17595;
double r17597 = sqrt(r17596);
double r17598 = log(r17597);
double r17599 = y_re;
double r17600 = r17598 * r17599;
double r17601 = atan2(r17594, r17590);
double r17602 = y_im;
double r17603 = cbrt(r17602);
double r17604 = r17603 * r17603;
double r17605 = r17601 * r17604;
double r17606 = r17605 * r17603;
double r17607 = r17600 - r17606;
double r17608 = exp(r17607);
double r17609 = r17601 * r17599;
double r17610 = -1.0;
double r17611 = r17610 / r17590;
double r17612 = log(r17611);
double r17613 = r17602 * r17612;
double r17614 = r17609 - r17613;
double r17615 = sin(r17614);
double r17616 = r17608 * r17615;
double r17617 = r17601 * r17602;
double r17618 = r17600 - r17617;
double r17619 = exp(r17618);
double r17620 = 1.0;
double r17621 = r17620 / r17590;
double r17622 = log(r17621);
double r17623 = r17602 * r17622;
double r17624 = r17609 - r17623;
double r17625 = sin(r17624);
double r17626 = r17619 * r17625;
double r17627 = r17592 ? r17616 : r17626;
return r17627;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -5.20017416521053e-309Initial program 31.8
rmApplied add-cube-cbrt31.8
Applied associate-*r*31.8
Taylor expanded around -inf 20.9
if -5.20017416521053e-309 < x.re Initial program 34.7
Taylor expanded around inf 25.3
Final simplification23.1
herbie shell --seed 2019362
(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)))))