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.323006072973230839347444461217504274066 \cdot 10^{-310}:\\
\;\;\;\;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(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{elif}\;x.re \le 1.000277774126816172777156713890057176382 \cdot 10^{-209} \lor \neg \left(x.re \le 1.255106323806992142969769505719842913614 \cdot 10^{-94}\right):\\
\;\;\;\;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 + \log x.re \cdot y.im\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 \left(\left(\sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}} \cdot \sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right) \cdot \sqrt[3]{\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)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r25527 = x_re;
double r25528 = r25527 * r25527;
double r25529 = x_im;
double r25530 = r25529 * r25529;
double r25531 = r25528 + r25530;
double r25532 = sqrt(r25531);
double r25533 = log(r25532);
double r25534 = y_re;
double r25535 = r25533 * r25534;
double r25536 = atan2(r25529, r25527);
double r25537 = y_im;
double r25538 = r25536 * r25537;
double r25539 = r25535 - r25538;
double r25540 = exp(r25539);
double r25541 = r25533 * r25537;
double r25542 = r25536 * r25534;
double r25543 = r25541 + r25542;
double r25544 = sin(r25543);
double r25545 = r25540 * r25544;
return r25545;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25546 = x_re;
double r25547 = -4.32300607297323e-310;
bool r25548 = r25546 <= r25547;
double r25549 = r25546 * r25546;
double r25550 = x_im;
double r25551 = r25550 * r25550;
double r25552 = r25549 + r25551;
double r25553 = sqrt(r25552);
double r25554 = log(r25553);
double r25555 = y_re;
double r25556 = r25554 * r25555;
double r25557 = atan2(r25550, r25546);
double r25558 = y_im;
double r25559 = r25557 * r25558;
double r25560 = r25556 - r25559;
double r25561 = exp(r25560);
double r25562 = -r25546;
double r25563 = log(r25562);
double r25564 = r25563 * r25558;
double r25565 = r25557 * r25555;
double r25566 = r25564 + r25565;
double r25567 = sin(r25566);
double r25568 = r25561 * r25567;
double r25569 = 1.0002777741268162e-209;
bool r25570 = r25546 <= r25569;
double r25571 = 1.2551063238069921e-94;
bool r25572 = r25546 <= r25571;
double r25573 = !r25572;
bool r25574 = r25570 || r25573;
double r25575 = log(r25546);
double r25576 = r25575 * r25558;
double r25577 = r25565 + r25576;
double r25578 = sin(r25577);
double r25579 = r25561 * r25578;
double r25580 = cbrt(r25553);
double r25581 = r25580 * r25580;
double r25582 = r25581 * r25580;
double r25583 = log(r25582);
double r25584 = r25583 * r25558;
double r25585 = r25584 + r25565;
double r25586 = sin(r25585);
double r25587 = r25561 * r25586;
double r25588 = r25574 ? r25579 : r25587;
double r25589 = r25548 ? r25568 : r25588;
return r25589;
}



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.32300607297323e-310Initial program 30.9
Taylor expanded around -inf 20.0
Simplified20.0
if -4.32300607297323e-310 < x.re < 1.0002777741268162e-209 or 1.2551063238069921e-94 < x.re Initial program 37.4
Taylor expanded around inf 26.2
Simplified26.2
if 1.0002777741268162e-209 < x.re < 1.2551063238069921e-94Initial program 23.2
rmApplied add-cube-cbrt23.2
Final simplification22.9
herbie shell --seed 2019347
(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)))))