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.121219671519223731301371692327955218506 \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(\log x.re \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 r26429 = x_re;
double r26430 = r26429 * r26429;
double r26431 = x_im;
double r26432 = r26431 * r26431;
double r26433 = r26430 + r26432;
double r26434 = sqrt(r26433);
double r26435 = log(r26434);
double r26436 = y_re;
double r26437 = r26435 * r26436;
double r26438 = atan2(r26431, r26429);
double r26439 = y_im;
double r26440 = r26438 * r26439;
double r26441 = r26437 - r26440;
double r26442 = exp(r26441);
double r26443 = r26435 * r26439;
double r26444 = r26438 * r26436;
double r26445 = r26443 + r26444;
double r26446 = sin(r26445);
double r26447 = r26442 * r26446;
return r26447;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r26448 = x_re;
double r26449 = -5.121219671519224e-309;
bool r26450 = r26448 <= r26449;
double r26451 = r26448 * r26448;
double r26452 = x_im;
double r26453 = r26452 * r26452;
double r26454 = r26451 + r26453;
double r26455 = sqrt(r26454);
double r26456 = log(r26455);
double r26457 = y_re;
double r26458 = r26456 * r26457;
double r26459 = atan2(r26452, r26448);
double r26460 = y_im;
double r26461 = r26459 * r26460;
double r26462 = r26458 - r26461;
double r26463 = exp(r26462);
double r26464 = r26459 * r26457;
double r26465 = -1.0;
double r26466 = r26465 / r26448;
double r26467 = log(r26466);
double r26468 = r26460 * r26467;
double r26469 = r26464 - r26468;
double r26470 = sin(r26469);
double r26471 = r26463 * r26470;
double r26472 = log(r26448);
double r26473 = r26472 * r26460;
double r26474 = r26473 + r26464;
double r26475 = sin(r26474);
double r26476 = r26463 * r26475;
double r26477 = r26450 ? r26471 : r26476;
return r26477;
}



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.121219671519224e-309Initial program 32.2
Taylor expanded around -inf 20.9
if -5.121219671519224e-309 < x.re Initial program 34.7
Taylor expanded around inf 24.4
Simplified24.4
Final simplification22.7
herbie shell --seed 2019306
(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)))))