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.13216937341787325047816921507658911156 \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 r16549 = x_re;
double r16550 = r16549 * r16549;
double r16551 = x_im;
double r16552 = r16551 * r16551;
double r16553 = r16550 + r16552;
double r16554 = sqrt(r16553);
double r16555 = log(r16554);
double r16556 = y_re;
double r16557 = r16555 * r16556;
double r16558 = atan2(r16551, r16549);
double r16559 = y_im;
double r16560 = r16558 * r16559;
double r16561 = r16557 - r16560;
double r16562 = exp(r16561);
double r16563 = r16555 * r16559;
double r16564 = r16558 * r16556;
double r16565 = r16563 + r16564;
double r16566 = sin(r16565);
double r16567 = r16562 * r16566;
return r16567;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16568 = x_re;
double r16569 = -5.132169373417873e-309;
bool r16570 = r16568 <= r16569;
double r16571 = r16568 * r16568;
double r16572 = x_im;
double r16573 = r16572 * r16572;
double r16574 = r16571 + r16573;
double r16575 = sqrt(r16574);
double r16576 = log(r16575);
double r16577 = y_re;
double r16578 = r16576 * r16577;
double r16579 = atan2(r16572, r16568);
double r16580 = y_im;
double r16581 = r16579 * r16580;
double r16582 = r16578 - r16581;
double r16583 = exp(r16582);
double r16584 = r16579 * r16577;
double r16585 = -1.0;
double r16586 = r16585 / r16568;
double r16587 = log(r16586);
double r16588 = r16580 * r16587;
double r16589 = r16584 - r16588;
double r16590 = sin(r16589);
double r16591 = r16583 * r16590;
double r16592 = log(r16568);
double r16593 = r16592 * r16580;
double r16594 = r16593 + r16584;
double r16595 = sin(r16594);
double r16596 = r16583 * r16595;
double r16597 = r16570 ? r16591 : r16596;
return r16597;
}



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.132169373417873e-309Initial program 32.2
rmApplied add-cbrt-cube37.2
Simplified37.2
Taylor expanded around -inf 19.9
if -5.132169373417873e-309 < x.re Initial program 35.5
Taylor expanded around inf 25.1
Final simplification22.5
herbie shell --seed 2019354
(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)))))