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 -6.0107995809817911 \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(\log x.re \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r20552 = x_re;
double r20553 = r20552 * r20552;
double r20554 = x_im;
double r20555 = r20554 * r20554;
double r20556 = r20553 + r20555;
double r20557 = sqrt(r20556);
double r20558 = log(r20557);
double r20559 = y_re;
double r20560 = r20558 * r20559;
double r20561 = atan2(r20554, r20552);
double r20562 = y_im;
double r20563 = r20561 * r20562;
double r20564 = r20560 - r20563;
double r20565 = exp(r20564);
double r20566 = r20558 * r20562;
double r20567 = r20561 * r20559;
double r20568 = r20566 + r20567;
double r20569 = sin(r20568);
double r20570 = r20565 * r20569;
return r20570;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r20571 = x_re;
double r20572 = -6.01079958098179e-309;
bool r20573 = r20571 <= r20572;
double r20574 = r20571 * r20571;
double r20575 = x_im;
double r20576 = r20575 * r20575;
double r20577 = r20574 + r20576;
double r20578 = sqrt(r20577);
double r20579 = log(r20578);
double r20580 = y_re;
double r20581 = r20579 * r20580;
double r20582 = atan2(r20575, r20571);
double r20583 = y_im;
double r20584 = r20582 * r20583;
double r20585 = r20581 - r20584;
double r20586 = exp(r20585);
double r20587 = r20582 * r20580;
double r20588 = -1.0;
double r20589 = r20588 / r20571;
double r20590 = log(r20589);
double r20591 = r20583 * r20590;
double r20592 = r20587 - r20591;
double r20593 = sin(r20592);
double r20594 = r20586 * r20593;
double r20595 = log(r20571);
double r20596 = r20595 * r20583;
double r20597 = r20596 + r20587;
double r20598 = sin(r20597);
double r20599 = r20586 * r20598;
double r20600 = r20573 ? r20594 : r20599;
return r20600;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -6.01079958098179e-309Initial program 31.6
Taylor expanded around -inf 19.6
if -6.01079958098179e-309 < x.re Initial program 34.3
Taylor expanded around inf 23.6
Final simplification21.7
herbie shell --seed 2020003
(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)))))