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.189251590720128421046416075251281086703 \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 r1345340 = x_re;
double r1345341 = r1345340 * r1345340;
double r1345342 = x_im;
double r1345343 = r1345342 * r1345342;
double r1345344 = r1345341 + r1345343;
double r1345345 = sqrt(r1345344);
double r1345346 = log(r1345345);
double r1345347 = y_re;
double r1345348 = r1345346 * r1345347;
double r1345349 = atan2(r1345342, r1345340);
double r1345350 = y_im;
double r1345351 = r1345349 * r1345350;
double r1345352 = r1345348 - r1345351;
double r1345353 = exp(r1345352);
double r1345354 = r1345346 * r1345350;
double r1345355 = r1345349 * r1345347;
double r1345356 = r1345354 + r1345355;
double r1345357 = sin(r1345356);
double r1345358 = r1345353 * r1345357;
return r1345358;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1345359 = x_re;
double r1345360 = -5.18925159072013e-310;
bool r1345361 = r1345359 <= r1345360;
double r1345362 = y_re;
double r1345363 = r1345359 * r1345359;
double r1345364 = x_im;
double r1345365 = r1345364 * r1345364;
double r1345366 = r1345363 + r1345365;
double r1345367 = sqrt(r1345366);
double r1345368 = log(r1345367);
double r1345369 = r1345362 * r1345368;
double r1345370 = atan2(r1345364, r1345359);
double r1345371 = y_im;
double r1345372 = r1345370 * r1345371;
double r1345373 = r1345369 - r1345372;
double r1345374 = exp(r1345373);
double r1345375 = r1345370 * r1345362;
double r1345376 = -r1345359;
double r1345377 = log(r1345376);
double r1345378 = r1345371 * r1345377;
double r1345379 = r1345375 + r1345378;
double r1345380 = sin(r1345379);
double r1345381 = r1345374 * r1345380;
double r1345382 = log(r1345359);
double r1345383 = r1345371 * r1345382;
double r1345384 = r1345375 + r1345383;
double r1345385 = sin(r1345384);
double r1345386 = r1345385 * r1345374;
double r1345387 = r1345361 ? r1345381 : r1345386;
return r1345387;
}



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.18925159072013e-310Initial program 31.7
Taylor expanded around -inf 20.8
Simplified20.8
if -5.18925159072013e-310 < x.re Initial program 34.3
Taylor expanded around inf 23.4
Final simplification22.1
herbie shell --seed 2019174
(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)))))