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 -3.4715063518587293 \cdot 10^{-252}:\\
\;\;\;\;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{elif}\;x.re \le 5.0832309970065638 \cdot 10^{-248}:\\
\;\;\;\;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 \left(\left(\sqrt[3]{\sin \left(\log \left(\sqrt{\sqrt{x.re \cdot x.re + x.im \cdot x.im}} \cdot \sqrt{\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)} \cdot \sqrt[3]{\sin \left(\log \left(\sqrt{\sqrt{x.re \cdot x.re + x.im \cdot x.im}} \cdot \sqrt{\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)}\right) \cdot \sqrt[3]{\sin \left(\log \left(\sqrt{\sqrt{x.re \cdot x.re + x.im \cdot x.im}} \cdot \sqrt{\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)}\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(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re - y.im \cdot \log \left(\frac{1}{x.re}\right)\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r65 = x_re;
double r66 = r65 * r65;
double r67 = x_im;
double r68 = r67 * r67;
double r69 = r66 + r68;
double r70 = sqrt(r69);
double r71 = log(r70);
double r72 = y_re;
double r73 = r71 * r72;
double r74 = atan2(r67, r65);
double r75 = y_im;
double r76 = r74 * r75;
double r77 = r73 - r76;
double r78 = exp(r77);
double r79 = r71 * r75;
double r80 = r74 * r72;
double r81 = r79 + r80;
double r82 = sin(r81);
double r83 = r78 * r82;
return r83;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r84 = x_re;
double r85 = -3.4715063518587293e-252;
bool r86 = r84 <= r85;
double r87 = r84 * r84;
double r88 = x_im;
double r89 = r88 * r88;
double r90 = r87 + r89;
double r91 = sqrt(r90);
double r92 = log(r91);
double r93 = y_re;
double r94 = r92 * r93;
double r95 = atan2(r88, r84);
double r96 = y_im;
double r97 = r95 * r96;
double r98 = r94 - r97;
double r99 = exp(r98);
double r100 = r95 * r93;
double r101 = -1.0;
double r102 = r101 / r84;
double r103 = log(r102);
double r104 = r96 * r103;
double r105 = r100 - r104;
double r106 = sin(r105);
double r107 = r99 * r106;
double r108 = 5.083230997006564e-248;
bool r109 = r84 <= r108;
double r110 = sqrt(r91);
double r111 = r110 * r110;
double r112 = log(r111);
double r113 = r112 * r96;
double r114 = r113 + r100;
double r115 = sin(r114);
double r116 = cbrt(r115);
double r117 = r116 * r116;
double r118 = r117 * r116;
double r119 = r99 * r118;
double r120 = 1.0;
double r121 = r120 / r84;
double r122 = log(r121);
double r123 = r96 * r122;
double r124 = r100 - r123;
double r125 = sin(r124);
double r126 = r99 * r125;
double r127 = r109 ? r119 : r126;
double r128 = r86 ? r107 : r127;
return r128;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -3.4715063518587293e-252Initial program 32.9
Taylor expanded around -inf 19.8
if -3.4715063518587293e-252 < x.re < 5.083230997006564e-248Initial program 30.3
rmApplied add-sqr-sqrt30.3
Applied sqrt-prod30.3
rmApplied add-cube-cbrt30.6
if 5.083230997006564e-248 < x.re Initial program 35.2
rmApplied add-cbrt-cube41.6
Simplified41.6
Taylor expanded around inf 24.3
Final simplification22.9
herbie shell --seed 2020025
(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)))))