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 r1404590 = x_re;
double r1404591 = r1404590 * r1404590;
double r1404592 = x_im;
double r1404593 = r1404592 * r1404592;
double r1404594 = r1404591 + r1404593;
double r1404595 = sqrt(r1404594);
double r1404596 = log(r1404595);
double r1404597 = y_re;
double r1404598 = r1404596 * r1404597;
double r1404599 = atan2(r1404592, r1404590);
double r1404600 = y_im;
double r1404601 = r1404599 * r1404600;
double r1404602 = r1404598 - r1404601;
double r1404603 = exp(r1404602);
double r1404604 = r1404596 * r1404600;
double r1404605 = r1404599 * r1404597;
double r1404606 = r1404604 + r1404605;
double r1404607 = sin(r1404606);
double r1404608 = r1404603 * r1404607;
return r1404608;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1404609 = x_re;
double r1404610 = -4.2640896224449e-310;
bool r1404611 = r1404609 <= r1404610;
double r1404612 = y_re;
double r1404613 = r1404609 * r1404609;
double r1404614 = x_im;
double r1404615 = r1404614 * r1404614;
double r1404616 = r1404613 + r1404615;
double r1404617 = sqrt(r1404616);
double r1404618 = log(r1404617);
double r1404619 = r1404612 * r1404618;
double r1404620 = atan2(r1404614, r1404609);
double r1404621 = y_im;
double r1404622 = r1404620 * r1404621;
double r1404623 = r1404619 - r1404622;
double r1404624 = exp(r1404623);
double r1404625 = r1404620 * r1404612;
double r1404626 = -r1404609;
double r1404627 = log(r1404626);
double r1404628 = r1404621 * r1404627;
double r1404629 = r1404625 + r1404628;
double r1404630 = sin(r1404629);
double r1404631 = r1404624 * r1404630;
double r1404632 = log(r1404609);
double r1404633 = r1404621 * r1404632;
double r1404634 = r1404625 + r1404633;
double r1404635 = sin(r1404634);
double r1404636 = r1404635 * r1404624;
double r1404637 = r1404611 ? r1404631 : r1404636;
return r1404637;
}



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