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.473521351266899 \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(y.im \cdot \log x.re + \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 r19505 = x_re;
double r19506 = r19505 * r19505;
double r19507 = x_im;
double r19508 = r19507 * r19507;
double r19509 = r19506 + r19508;
double r19510 = sqrt(r19509);
double r19511 = log(r19510);
double r19512 = y_re;
double r19513 = r19511 * r19512;
double r19514 = atan2(r19507, r19505);
double r19515 = y_im;
double r19516 = r19514 * r19515;
double r19517 = r19513 - r19516;
double r19518 = exp(r19517);
double r19519 = r19511 * r19515;
double r19520 = r19514 * r19512;
double r19521 = r19519 + r19520;
double r19522 = sin(r19521);
double r19523 = r19518 * r19522;
return r19523;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r19524 = x_re;
double r19525 = -5.4735213512669e-309;
bool r19526 = r19524 <= r19525;
double r19527 = r19524 * r19524;
double r19528 = x_im;
double r19529 = r19528 * r19528;
double r19530 = r19527 + r19529;
double r19531 = sqrt(r19530);
double r19532 = log(r19531);
double r19533 = y_re;
double r19534 = r19532 * r19533;
double r19535 = atan2(r19528, r19524);
double r19536 = y_im;
double r19537 = r19535 * r19536;
double r19538 = r19534 - r19537;
double r19539 = exp(r19538);
double r19540 = r19535 * r19533;
double r19541 = -1.0;
double r19542 = r19541 / r19524;
double r19543 = log(r19542);
double r19544 = r19536 * r19543;
double r19545 = r19540 - r19544;
double r19546 = sin(r19545);
double r19547 = r19539 * r19546;
double r19548 = log(r19524);
double r19549 = r19536 * r19548;
double r19550 = r19549 + r19540;
double r19551 = sin(r19550);
double r19552 = r19539 * r19551;
double r19553 = r19526 ? r19547 : r19552;
return r19553;
}



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.4735213512669e-309Initial program 32.3
rmApplied add-cbrt-cube37.6
Simplified37.6
Taylor expanded around -inf 20.4
if -5.4735213512669e-309 < x.re Initial program 34.7
rmApplied add-cbrt-cube40.7
Simplified40.7
Taylor expanded around inf 24.7
Simplified24.7
Final simplification22.7
herbie shell --seed 2020043
(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)))))