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 2.922951187755237403789063891174243329508 \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 r1287527 = x_re;
double r1287528 = r1287527 * r1287527;
double r1287529 = x_im;
double r1287530 = r1287529 * r1287529;
double r1287531 = r1287528 + r1287530;
double r1287532 = sqrt(r1287531);
double r1287533 = log(r1287532);
double r1287534 = y_re;
double r1287535 = r1287533 * r1287534;
double r1287536 = atan2(r1287529, r1287527);
double r1287537 = y_im;
double r1287538 = r1287536 * r1287537;
double r1287539 = r1287535 - r1287538;
double r1287540 = exp(r1287539);
double r1287541 = r1287533 * r1287537;
double r1287542 = r1287536 * r1287534;
double r1287543 = r1287541 + r1287542;
double r1287544 = sin(r1287543);
double r1287545 = r1287540 * r1287544;
return r1287545;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1287546 = x_re;
double r1287547 = 2.92295118775524e-310;
bool r1287548 = r1287546 <= r1287547;
double r1287549 = y_re;
double r1287550 = r1287546 * r1287546;
double r1287551 = x_im;
double r1287552 = r1287551 * r1287551;
double r1287553 = r1287550 + r1287552;
double r1287554 = sqrt(r1287553);
double r1287555 = log(r1287554);
double r1287556 = r1287549 * r1287555;
double r1287557 = atan2(r1287551, r1287546);
double r1287558 = y_im;
double r1287559 = r1287557 * r1287558;
double r1287560 = r1287556 - r1287559;
double r1287561 = exp(r1287560);
double r1287562 = r1287557 * r1287549;
double r1287563 = -r1287546;
double r1287564 = log(r1287563);
double r1287565 = r1287558 * r1287564;
double r1287566 = r1287562 + r1287565;
double r1287567 = sin(r1287566);
double r1287568 = r1287561 * r1287567;
double r1287569 = log(r1287546);
double r1287570 = r1287558 * r1287569;
double r1287571 = r1287562 + r1287570;
double r1287572 = sin(r1287571);
double r1287573 = r1287572 * r1287561;
double r1287574 = r1287548 ? r1287568 : r1287573;
return r1287574;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 2.92295118775524e-310Initial program 32.2
Taylor expanded around -inf 20.2
Simplified20.2
if 2.92295118775524e-310 < x.re Initial program 35.3
Taylor expanded around inf 24.7
Final simplification22.5
herbie shell --seed 2019192
(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)))))