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.774698178669196591967484379098684260661 \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 r26516 = x_re;
double r26517 = r26516 * r26516;
double r26518 = x_im;
double r26519 = r26518 * r26518;
double r26520 = r26517 + r26519;
double r26521 = sqrt(r26520);
double r26522 = log(r26521);
double r26523 = y_re;
double r26524 = r26522 * r26523;
double r26525 = atan2(r26518, r26516);
double r26526 = y_im;
double r26527 = r26525 * r26526;
double r26528 = r26524 - r26527;
double r26529 = exp(r26528);
double r26530 = r26522 * r26526;
double r26531 = r26525 * r26523;
double r26532 = r26530 + r26531;
double r26533 = sin(r26532);
double r26534 = r26529 * r26533;
return r26534;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r26535 = x_re;
double r26536 = -5.774698178669197e-309;
bool r26537 = r26535 <= r26536;
double r26538 = r26535 * r26535;
double r26539 = x_im;
double r26540 = r26539 * r26539;
double r26541 = r26538 + r26540;
double r26542 = sqrt(r26541);
double r26543 = log(r26542);
double r26544 = y_re;
double r26545 = r26543 * r26544;
double r26546 = atan2(r26539, r26535);
double r26547 = y_im;
double r26548 = r26546 * r26547;
double r26549 = r26545 - r26548;
double r26550 = exp(r26549);
double r26551 = r26546 * r26544;
double r26552 = -1.0;
double r26553 = r26552 / r26535;
double r26554 = log(r26553);
double r26555 = r26547 * r26554;
double r26556 = r26551 - r26555;
double r26557 = sin(r26556);
double r26558 = r26550 * r26557;
double r26559 = log(r26535);
double r26560 = r26559 * r26547;
double r26561 = r26560 + r26551;
double r26562 = sin(r26561);
double r26563 = r26550 * r26562;
double r26564 = r26537 ? r26558 : r26563;
return r26564;
}



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.774698178669197e-309Initial program 31.8
Taylor expanded around -inf 20.2
if -5.774698178669197e-309 < x.re Initial program 35.3
Taylor expanded around inf 24.5
Final simplification22.4
herbie shell --seed 2019304
(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)))))