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.6144037454749138 \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 r16523 = x_re;
double r16524 = r16523 * r16523;
double r16525 = x_im;
double r16526 = r16525 * r16525;
double r16527 = r16524 + r16526;
double r16528 = sqrt(r16527);
double r16529 = log(r16528);
double r16530 = y_re;
double r16531 = r16529 * r16530;
double r16532 = atan2(r16525, r16523);
double r16533 = y_im;
double r16534 = r16532 * r16533;
double r16535 = r16531 - r16534;
double r16536 = exp(r16535);
double r16537 = r16529 * r16533;
double r16538 = r16532 * r16530;
double r16539 = r16537 + r16538;
double r16540 = sin(r16539);
double r16541 = r16536 * r16540;
return r16541;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16542 = x_re;
double r16543 = -5.614403745474914e-309;
bool r16544 = r16542 <= r16543;
double r16545 = r16542 * r16542;
double r16546 = x_im;
double r16547 = r16546 * r16546;
double r16548 = r16545 + r16547;
double r16549 = sqrt(r16548);
double r16550 = log(r16549);
double r16551 = y_re;
double r16552 = r16550 * r16551;
double r16553 = atan2(r16546, r16542);
double r16554 = y_im;
double r16555 = r16553 * r16554;
double r16556 = r16552 - r16555;
double r16557 = exp(r16556);
double r16558 = r16553 * r16551;
double r16559 = -1.0;
double r16560 = r16559 / r16542;
double r16561 = log(r16560);
double r16562 = r16554 * r16561;
double r16563 = r16558 - r16562;
double r16564 = sin(r16563);
double r16565 = r16557 * r16564;
double r16566 = 1.0;
double r16567 = r16566 / r16542;
double r16568 = log(r16567);
double r16569 = r16554 * r16568;
double r16570 = r16558 - r16569;
double r16571 = sin(r16570);
double r16572 = r16557 * r16571;
double r16573 = r16544 ? r16565 : r16572;
return r16573;
}



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.614403745474914e-309Initial program 31.9
Taylor expanded around -inf 21.2
if -5.614403745474914e-309 < x.re Initial program 34.6
rmApplied add-cbrt-cube40.3
Simplified40.3
Taylor expanded around inf 24.3
Final simplification22.8
herbie shell --seed 2020049
(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)))))