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.369358519689769 \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(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r21093 = x_re;
double r21094 = r21093 * r21093;
double r21095 = x_im;
double r21096 = r21095 * r21095;
double r21097 = r21094 + r21096;
double r21098 = sqrt(r21097);
double r21099 = log(r21098);
double r21100 = y_re;
double r21101 = r21099 * r21100;
double r21102 = atan2(r21095, r21093);
double r21103 = y_im;
double r21104 = r21102 * r21103;
double r21105 = r21101 - r21104;
double r21106 = exp(r21105);
double r21107 = r21099 * r21103;
double r21108 = r21102 * r21100;
double r21109 = r21107 + r21108;
double r21110 = sin(r21109);
double r21111 = r21106 * r21110;
return r21111;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r21112 = x_re;
double r21113 = -5.36935851968977e-309;
bool r21114 = r21112 <= r21113;
double r21115 = r21112 * r21112;
double r21116 = x_im;
double r21117 = r21116 * r21116;
double r21118 = r21115 + r21117;
double r21119 = sqrt(r21118);
double r21120 = log(r21119);
double r21121 = y_re;
double r21122 = r21120 * r21121;
double r21123 = atan2(r21116, r21112);
double r21124 = y_im;
double r21125 = r21123 * r21124;
double r21126 = r21122 - r21125;
double r21127 = exp(r21126);
double r21128 = r21123 * r21121;
double r21129 = -1.0;
double r21130 = r21129 / r21112;
double r21131 = log(r21130);
double r21132 = r21124 * r21131;
double r21133 = r21128 - r21132;
double r21134 = sin(r21133);
double r21135 = r21127 * r21134;
double r21136 = log(r21112);
double r21137 = r21124 * r21136;
double r21138 = r21128 + r21137;
double r21139 = sin(r21138);
double r21140 = r21127 * r21139;
double r21141 = r21114 ? r21135 : r21140;
return r21141;
}



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.36935851968977e-309Initial program 31.6
rmApplied add-cube-cbrt31.6
Taylor expanded around -inf 20.0
if -5.36935851968977e-309 < x.re Initial program 34.8
rmApplied add-cube-cbrt34.8
Taylor expanded around inf 24.5
Simplified24.5
Final simplification22.3
herbie shell --seed 2020047
(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)))))