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.448885253632785 \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(-1 \cdot x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\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 r25378 = x_re;
double r25379 = r25378 * r25378;
double r25380 = x_im;
double r25381 = r25380 * r25380;
double r25382 = r25379 + r25381;
double r25383 = sqrt(r25382);
double r25384 = log(r25383);
double r25385 = y_re;
double r25386 = r25384 * r25385;
double r25387 = atan2(r25380, r25378);
double r25388 = y_im;
double r25389 = r25387 * r25388;
double r25390 = r25386 - r25389;
double r25391 = exp(r25390);
double r25392 = r25384 * r25388;
double r25393 = r25387 * r25385;
double r25394 = r25392 + r25393;
double r25395 = sin(r25394);
double r25396 = r25391 * r25395;
return r25396;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25397 = x_re;
double r25398 = 1.4488852536328e-310;
bool r25399 = r25397 <= r25398;
double r25400 = r25397 * r25397;
double r25401 = x_im;
double r25402 = r25401 * r25401;
double r25403 = r25400 + r25402;
double r25404 = sqrt(r25403);
double r25405 = log(r25404);
double r25406 = y_re;
double r25407 = r25405 * r25406;
double r25408 = atan2(r25401, r25397);
double r25409 = y_im;
double r25410 = r25408 * r25409;
double r25411 = r25407 - r25410;
double r25412 = exp(r25411);
double r25413 = -1.0;
double r25414 = r25413 * r25397;
double r25415 = log(r25414);
double r25416 = r25415 * r25409;
double r25417 = r25408 * r25406;
double r25418 = r25416 + r25417;
double r25419 = sin(r25418);
double r25420 = r25412 * r25419;
double r25421 = 1.0;
double r25422 = r25421 / r25397;
double r25423 = log(r25422);
double r25424 = r25409 * r25423;
double r25425 = r25417 - r25424;
double r25426 = sin(r25425);
double r25427 = r25412 * r25426;
double r25428 = r25399 ? r25420 : r25427;
return r25428;
}



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.4488852536328e-310Initial program 31.1
Taylor expanded around -inf 20.5
if 1.4488852536328e-310 < x.re Initial program 35.5
Taylor expanded around inf 25.1
Final simplification22.8
herbie shell --seed 2020057
(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)))))