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 4.11803379523495 \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}:\\
\;\;\;\;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 + \log x.re \cdot y.im\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1409380 = x_re;
double r1409381 = r1409380 * r1409380;
double r1409382 = x_im;
double r1409383 = r1409382 * r1409382;
double r1409384 = r1409381 + r1409383;
double r1409385 = sqrt(r1409384);
double r1409386 = log(r1409385);
double r1409387 = y_re;
double r1409388 = r1409386 * r1409387;
double r1409389 = atan2(r1409382, r1409380);
double r1409390 = y_im;
double r1409391 = r1409389 * r1409390;
double r1409392 = r1409388 - r1409391;
double r1409393 = exp(r1409392);
double r1409394 = r1409386 * r1409390;
double r1409395 = r1409389 * r1409387;
double r1409396 = r1409394 + r1409395;
double r1409397 = sin(r1409396);
double r1409398 = r1409393 * r1409397;
return r1409398;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1409399 = x_re;
double r1409400 = 4.11803379523495e-310;
bool r1409401 = r1409399 <= r1409400;
double r1409402 = y_re;
double r1409403 = r1409399 * r1409399;
double r1409404 = x_im;
double r1409405 = r1409404 * r1409404;
double r1409406 = r1409403 + r1409405;
double r1409407 = sqrt(r1409406);
double r1409408 = log(r1409407);
double r1409409 = r1409402 * r1409408;
double r1409410 = atan2(r1409404, r1409399);
double r1409411 = y_im;
double r1409412 = r1409410 * r1409411;
double r1409413 = r1409409 - r1409412;
double r1409414 = exp(r1409413);
double r1409415 = r1409410 * r1409402;
double r1409416 = -r1409399;
double r1409417 = log(r1409416);
double r1409418 = r1409411 * r1409417;
double r1409419 = r1409415 + r1409418;
double r1409420 = sin(r1409419);
double r1409421 = r1409414 * r1409420;
double r1409422 = log(r1409399);
double r1409423 = r1409422 * r1409411;
double r1409424 = r1409415 + r1409423;
double r1409425 = sin(r1409424);
double r1409426 = r1409414 * r1409425;
double r1409427 = r1409401 ? r1409421 : r1409426;
return r1409427;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 4.11803379523495e-310Initial program 30.4
Taylor expanded around -inf 19.9
Simplified19.9
if 4.11803379523495e-310 < x.re Initial program 34.4
Taylor expanded around inf 24.6
Simplified24.6
Final simplification22.3
herbie shell --seed 2019162
(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)))))