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.1166236526000045 \cdot 10^{-309}:\\
\;\;\;\;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)\\
\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 r17594 = x_re;
double r17595 = r17594 * r17594;
double r17596 = x_im;
double r17597 = r17596 * r17596;
double r17598 = r17595 + r17597;
double r17599 = sqrt(r17598);
double r17600 = log(r17599);
double r17601 = y_re;
double r17602 = r17600 * r17601;
double r17603 = atan2(r17596, r17594);
double r17604 = y_im;
double r17605 = r17603 * r17604;
double r17606 = r17602 - r17605;
double r17607 = exp(r17606);
double r17608 = r17600 * r17604;
double r17609 = r17603 * r17601;
double r17610 = r17608 + r17609;
double r17611 = sin(r17610);
double r17612 = r17607 * r17611;
return r17612;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17613 = x_re;
double r17614 = -5.116623652600005e-309;
bool r17615 = r17613 <= r17614;
double r17616 = r17613 * r17613;
double r17617 = x_im;
double r17618 = r17617 * r17617;
double r17619 = r17616 + r17618;
double r17620 = sqrt(r17619);
double r17621 = log(r17620);
double r17622 = y_re;
double r17623 = r17621 * r17622;
double r17624 = atan2(r17617, r17613);
double r17625 = y_im;
double r17626 = r17624 * r17625;
double r17627 = r17623 - r17626;
double r17628 = exp(r17627);
double r17629 = r17624 * r17622;
double r17630 = -1.0;
double r17631 = r17630 / r17613;
double r17632 = log(r17631);
double r17633 = r17625 * r17632;
double r17634 = r17629 - r17633;
double r17635 = sin(r17634);
double r17636 = r17628 * r17635;
double r17637 = 1.0;
double r17638 = r17637 / r17613;
double r17639 = log(r17638);
double r17640 = r17625 * r17639;
double r17641 = r17629 - r17640;
double r17642 = sin(r17641);
double r17643 = r17628 * r17642;
double r17644 = r17615 ? r17636 : r17643;
return r17644;
}



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.116623652600005e-309Initial program 32.7
Taylor expanded around -inf 20.5
if -5.116623652600005e-309 < x.re Initial program 34.3
Taylor expanded around inf 24.6
Final simplification22.6
herbie shell --seed 2020018
(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)))))