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.981175661217880230247335202245165629863 \cdot 10^{-311}:\\
\;\;\;\;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(-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 - \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 r28277 = x_re;
double r28278 = r28277 * r28277;
double r28279 = x_im;
double r28280 = r28279 * r28279;
double r28281 = r28278 + r28280;
double r28282 = sqrt(r28281);
double r28283 = log(r28282);
double r28284 = y_re;
double r28285 = r28283 * r28284;
double r28286 = atan2(r28279, r28277);
double r28287 = y_im;
double r28288 = r28286 * r28287;
double r28289 = r28285 - r28288;
double r28290 = exp(r28289);
double r28291 = r28283 * r28287;
double r28292 = r28286 * r28284;
double r28293 = r28291 + r28292;
double r28294 = sin(r28293);
double r28295 = r28290 * r28294;
return r28295;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r28296 = x_re;
double r28297 = -1.9811756612179e-311;
bool r28298 = r28296 <= r28297;
double r28299 = r28296 * r28296;
double r28300 = x_im;
double r28301 = r28300 * r28300;
double r28302 = r28299 + r28301;
double r28303 = sqrt(r28302);
double r28304 = log(r28303);
double r28305 = y_re;
double r28306 = r28304 * r28305;
double r28307 = atan2(r28300, r28296);
double r28308 = y_im;
double r28309 = r28307 * r28308;
double r28310 = r28306 - r28309;
double r28311 = exp(r28310);
double r28312 = -r28296;
double r28313 = log(r28312);
double r28314 = r28313 * r28308;
double r28315 = r28307 * r28305;
double r28316 = r28314 + r28315;
double r28317 = sin(r28316);
double r28318 = r28311 * r28317;
double r28319 = log(r28296);
double r28320 = r28308 * r28319;
double r28321 = r28315 + r28320;
double r28322 = sin(r28321);
double r28323 = r28311 * r28322;
double r28324 = r28298 ? r28318 : r28323;
return r28324;
}



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.9811756612179e-311Initial program 31.6
Taylor expanded around -inf 21.0
Simplified21.0
if -1.9811756612179e-311 < x.re Initial program 35.0
rmApplied add-cube-cbrt35.0
Applied associate-*r*35.0
Taylor expanded around inf 24.5
Simplified24.5
Final simplification22.8
herbie shell --seed 2019326
(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)))))