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 -4.2640896224449 \cdot 10^{-310}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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(-x.re\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1404593 = x_re;
double r1404594 = r1404593 * r1404593;
double r1404595 = x_im;
double r1404596 = r1404595 * r1404595;
double r1404597 = r1404594 + r1404596;
double r1404598 = sqrt(r1404597);
double r1404599 = log(r1404598);
double r1404600 = y_re;
double r1404601 = r1404599 * r1404600;
double r1404602 = atan2(r1404595, r1404593);
double r1404603 = y_im;
double r1404604 = r1404602 * r1404603;
double r1404605 = r1404601 - r1404604;
double r1404606 = exp(r1404605);
double r1404607 = r1404599 * r1404603;
double r1404608 = r1404602 * r1404600;
double r1404609 = r1404607 + r1404608;
double r1404610 = sin(r1404609);
double r1404611 = r1404606 * r1404610;
return r1404611;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1404612 = x_re;
double r1404613 = -4.2640896224449e-310;
bool r1404614 = r1404612 <= r1404613;
double r1404615 = y_re;
double r1404616 = r1404612 * r1404612;
double r1404617 = x_im;
double r1404618 = r1404617 * r1404617;
double r1404619 = r1404616 + r1404618;
double r1404620 = sqrt(r1404619);
double r1404621 = log(r1404620);
double r1404622 = r1404615 * r1404621;
double r1404623 = atan2(r1404617, r1404612);
double r1404624 = y_im;
double r1404625 = r1404623 * r1404624;
double r1404626 = r1404622 - r1404625;
double r1404627 = exp(r1404626);
double r1404628 = r1404623 * r1404615;
double r1404629 = -r1404612;
double r1404630 = log(r1404629);
double r1404631 = r1404624 * r1404630;
double r1404632 = r1404628 + r1404631;
double r1404633 = sin(r1404632);
double r1404634 = r1404627 * r1404633;
double r1404635 = log(r1404612);
double r1404636 = r1404624 * r1404635;
double r1404637 = r1404628 + r1404636;
double r1404638 = sin(r1404637);
double r1404639 = r1404638 * r1404627;
double r1404640 = r1404614 ? r1404634 : r1404639;
return r1404640;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.2640896224449e-310Initial program 31.1
Taylor expanded around -inf 20.8
Simplified20.8
if -4.2640896224449e-310 < x.re Initial program 35.1
Taylor expanded around inf 25.0
Simplified25.0
Final simplification22.9
herbie shell --seed 2019163
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
(* (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)))))