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}\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.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} \le 1.2773118792863125 \cdot 10^{-20}:\\
\;\;\;\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.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}\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right) \cdot e^{\log \left(-x.re\right) \cdot y.re - \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 r1014411 = x_re;
double r1014412 = r1014411 * r1014411;
double r1014413 = x_im;
double r1014414 = r1014413 * r1014413;
double r1014415 = r1014412 + r1014414;
double r1014416 = sqrt(r1014415);
double r1014417 = log(r1014416);
double r1014418 = y_re;
double r1014419 = r1014417 * r1014418;
double r1014420 = atan2(r1014413, r1014411);
double r1014421 = y_im;
double r1014422 = r1014420 * r1014421;
double r1014423 = r1014419 - r1014422;
double r1014424 = exp(r1014423);
double r1014425 = r1014417 * r1014421;
double r1014426 = r1014420 * r1014418;
double r1014427 = r1014425 + r1014426;
double r1014428 = sin(r1014427);
double r1014429 = r1014424 * r1014428;
return r1014429;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1014430 = y_im;
double r1014431 = x_re;
double r1014432 = r1014431 * r1014431;
double r1014433 = x_im;
double r1014434 = r1014433 * r1014433;
double r1014435 = r1014432 + r1014434;
double r1014436 = sqrt(r1014435);
double r1014437 = log(r1014436);
double r1014438 = r1014430 * r1014437;
double r1014439 = atan2(r1014433, r1014431);
double r1014440 = y_re;
double r1014441 = r1014439 * r1014440;
double r1014442 = r1014438 + r1014441;
double r1014443 = sin(r1014442);
double r1014444 = r1014440 * r1014437;
double r1014445 = r1014439 * r1014430;
double r1014446 = r1014444 - r1014445;
double r1014447 = exp(r1014446);
double r1014448 = r1014443 * r1014447;
double r1014449 = 1.2773118792863125e-20;
bool r1014450 = r1014448 <= r1014449;
double r1014451 = -r1014431;
double r1014452 = log(r1014451);
double r1014453 = r1014430 * r1014452;
double r1014454 = r1014441 + r1014453;
double r1014455 = sin(r1014454);
double r1014456 = r1014452 * r1014440;
double r1014457 = r1014456 - r1014445;
double r1014458 = exp(r1014457);
double r1014459 = r1014455 * r1014458;
double r1014460 = r1014450 ? r1014448 : r1014459;
return r1014460;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (* (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)))) < 1.2773118792863125e-20Initial program 0.2
if 1.2773118792863125e-20 < (* (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)))) Initial program 62.7
Taylor expanded around -inf 21.7
Simplified21.7
Taylor expanded around -inf 20.3
Simplified20.3
Final simplification10.1
herbie shell --seed 2019137
(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)))))