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 1.09120035193117 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}\right) \cdot \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot y.im\right)} \cdot \sin \left(\log \left(-1 \cdot x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{else}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}\right) \cdot \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot y.im\right)} \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 r19117 = x_re;
double r19118 = r19117 * r19117;
double r19119 = x_im;
double r19120 = r19119 * r19119;
double r19121 = r19118 + r19120;
double r19122 = sqrt(r19121);
double r19123 = log(r19122);
double r19124 = y_re;
double r19125 = r19123 * r19124;
double r19126 = atan2(r19119, r19117);
double r19127 = y_im;
double r19128 = r19126 * r19127;
double r19129 = r19125 - r19128;
double r19130 = exp(r19129);
double r19131 = r19123 * r19127;
double r19132 = r19126 * r19124;
double r19133 = r19131 + r19132;
double r19134 = sin(r19133);
double r19135 = r19130 * r19134;
return r19135;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r19136 = x_re;
double r19137 = 1.09120035193117e-310;
bool r19138 = r19136 <= r19137;
double r19139 = r19136 * r19136;
double r19140 = x_im;
double r19141 = r19140 * r19140;
double r19142 = r19139 + r19141;
double r19143 = sqrt(r19142);
double r19144 = log(r19143);
double r19145 = y_re;
double r19146 = r19144 * r19145;
double r19147 = atan2(r19140, r19136);
double r19148 = cbrt(r19147);
double r19149 = r19148 * r19148;
double r19150 = y_im;
double r19151 = r19148 * r19150;
double r19152 = r19149 * r19151;
double r19153 = r19146 - r19152;
double r19154 = exp(r19153);
double r19155 = -1.0;
double r19156 = r19155 * r19136;
double r19157 = log(r19156);
double r19158 = r19157 * r19150;
double r19159 = r19147 * r19145;
double r19160 = r19158 + r19159;
double r19161 = sin(r19160);
double r19162 = r19154 * r19161;
double r19163 = 1.0;
double r19164 = r19163 / r19136;
double r19165 = log(r19164);
double r19166 = r19150 * r19165;
double r19167 = r19159 - r19166;
double r19168 = sin(r19167);
double r19169 = r19154 * r19168;
double r19170 = r19138 ? r19162 : r19169;
return r19170;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 1.09120035193117e-310Initial program 32.0
rmApplied add-cube-cbrt32.0
Applied associate-*l*32.0
Taylor expanded around -inf 20.4
if 1.09120035193117e-310 < x.re Initial program 34.4
rmApplied add-cube-cbrt34.4
Applied associate-*l*34.4
Taylor expanded around inf 24.2
Final simplification22.4
herbie shell --seed 2020089
(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)))))