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.369358519689769 \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 r17344 = x_re;
double r17345 = r17344 * r17344;
double r17346 = x_im;
double r17347 = r17346 * r17346;
double r17348 = r17345 + r17347;
double r17349 = sqrt(r17348);
double r17350 = log(r17349);
double r17351 = y_re;
double r17352 = r17350 * r17351;
double r17353 = atan2(r17346, r17344);
double r17354 = y_im;
double r17355 = r17353 * r17354;
double r17356 = r17352 - r17355;
double r17357 = exp(r17356);
double r17358 = r17350 * r17354;
double r17359 = r17353 * r17351;
double r17360 = r17358 + r17359;
double r17361 = sin(r17360);
double r17362 = r17357 * r17361;
return r17362;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17363 = x_re;
double r17364 = -5.36935851968977e-309;
bool r17365 = r17363 <= r17364;
double r17366 = r17363 * r17363;
double r17367 = x_im;
double r17368 = r17367 * r17367;
double r17369 = r17366 + r17368;
double r17370 = sqrt(r17369);
double r17371 = log(r17370);
double r17372 = y_re;
double r17373 = r17371 * r17372;
double r17374 = atan2(r17367, r17363);
double r17375 = y_im;
double r17376 = r17374 * r17375;
double r17377 = r17373 - r17376;
double r17378 = exp(r17377);
double r17379 = r17374 * r17372;
double r17380 = -1.0;
double r17381 = r17380 / r17363;
double r17382 = log(r17381);
double r17383 = r17375 * r17382;
double r17384 = r17379 - r17383;
double r17385 = sin(r17384);
double r17386 = r17378 * r17385;
double r17387 = 1.0;
double r17388 = r17387 / r17363;
double r17389 = log(r17388);
double r17390 = r17375 * r17389;
double r17391 = r17379 - r17390;
double r17392 = sin(r17391);
double r17393 = r17378 * r17392;
double r17394 = r17365 ? r17386 : r17393;
return r17394;
}



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.36935851968977e-309Initial program 31.6
rmApplied add-cube-cbrt31.6
Taylor expanded around -inf 20.0
if -5.36935851968977e-309 < x.re Initial program 34.8
Taylor expanded around inf 24.5
Final simplification22.3
herbie shell --seed 2020047
(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)))))