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 -1.39623527537587 \cdot 10^{-310}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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(-x.re\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1443547 = x_re;
double r1443548 = r1443547 * r1443547;
double r1443549 = x_im;
double r1443550 = r1443549 * r1443549;
double r1443551 = r1443548 + r1443550;
double r1443552 = sqrt(r1443551);
double r1443553 = log(r1443552);
double r1443554 = y_re;
double r1443555 = r1443553 * r1443554;
double r1443556 = atan2(r1443549, r1443547);
double r1443557 = y_im;
double r1443558 = r1443556 * r1443557;
double r1443559 = r1443555 - r1443558;
double r1443560 = exp(r1443559);
double r1443561 = r1443553 * r1443557;
double r1443562 = r1443556 * r1443554;
double r1443563 = r1443561 + r1443562;
double r1443564 = sin(r1443563);
double r1443565 = r1443560 * r1443564;
return r1443565;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1443566 = x_re;
double r1443567 = -1.39623527537587e-310;
bool r1443568 = r1443566 <= r1443567;
double r1443569 = y_re;
double r1443570 = r1443566 * r1443566;
double r1443571 = x_im;
double r1443572 = r1443571 * r1443571;
double r1443573 = r1443570 + r1443572;
double r1443574 = sqrt(r1443573);
double r1443575 = log(r1443574);
double r1443576 = r1443569 * r1443575;
double r1443577 = atan2(r1443571, r1443566);
double r1443578 = y_im;
double r1443579 = r1443577 * r1443578;
double r1443580 = r1443576 - r1443579;
double r1443581 = exp(r1443580);
double r1443582 = r1443577 * r1443569;
double r1443583 = -r1443566;
double r1443584 = log(r1443583);
double r1443585 = r1443578 * r1443584;
double r1443586 = r1443582 + r1443585;
double r1443587 = sin(r1443586);
double r1443588 = r1443581 * r1443587;
double r1443589 = log(r1443566);
double r1443590 = r1443578 * r1443589;
double r1443591 = r1443582 + r1443590;
double r1443592 = sin(r1443591);
double r1443593 = r1443592 * r1443581;
double r1443594 = r1443568 ? r1443588 : r1443593;
return r1443594;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -1.39623527537587e-310Initial program 31.9
Taylor expanded around -inf 21.0
Simplified21.0
if -1.39623527537587e-310 < x.re Initial program 33.1
Taylor expanded around inf 23.3
Final simplification22.2
herbie shell --seed 2019158
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
(* (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)))))