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 r18118 = x_re;
double r18119 = r18118 * r18118;
double r18120 = x_im;
double r18121 = r18120 * r18120;
double r18122 = r18119 + r18121;
double r18123 = sqrt(r18122);
double r18124 = log(r18123);
double r18125 = y_re;
double r18126 = r18124 * r18125;
double r18127 = atan2(r18120, r18118);
double r18128 = y_im;
double r18129 = r18127 * r18128;
double r18130 = r18126 - r18129;
double r18131 = exp(r18130);
double r18132 = r18124 * r18128;
double r18133 = r18127 * r18125;
double r18134 = r18132 + r18133;
double r18135 = sin(r18134);
double r18136 = r18131 * r18135;
return r18136;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r18137 = x_re;
double r18138 = -3.4715063518587293e-252;
bool r18139 = r18137 <= r18138;
double r18140 = r18137 * r18137;
double r18141 = x_im;
double r18142 = r18141 * r18141;
double r18143 = r18140 + r18142;
double r18144 = sqrt(r18143);
double r18145 = log(r18144);
double r18146 = y_re;
double r18147 = r18145 * r18146;
double r18148 = atan2(r18141, r18137);
double r18149 = y_im;
double r18150 = r18148 * r18149;
double r18151 = r18147 - r18150;
double r18152 = exp(r18151);
double r18153 = r18148 * r18146;
double r18154 = -1.0;
double r18155 = r18154 / r18137;
double r18156 = log(r18155);
double r18157 = r18149 * r18156;
double r18158 = r18153 - r18157;
double r18159 = sin(r18158);
double r18160 = r18152 * r18159;
double r18161 = 5.083230997006564e-248;
bool r18162 = r18137 <= r18161;
double r18163 = sqrt(r18144);
double r18164 = r18163 * r18163;
double r18165 = log(r18164);
double r18166 = r18165 * r18149;
double r18167 = r18166 + r18153;
double r18168 = sin(r18167);
double r18169 = cbrt(r18168);
double r18170 = r18169 * r18169;
double r18171 = r18170 * r18169;
double r18172 = r18152 * r18171;
double r18173 = 1.0;
double r18174 = r18173 / r18137;
double r18175 = log(r18174);
double r18176 = r18149 * r18175;
double r18177 = r18153 - r18176;
double r18178 = sin(r18177);
double r18179 = r18152 * r18178;
double r18180 = r18162 ? r18172 : r18179;
double r18181 = r18139 ? r18160 : r18180;
return r18181;
}



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
rmApplied add-sqr-sqrt32.9
Applied sqrt-prod32.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-sqr-sqrt35.2
Applied sqrt-prod35.2
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)))))