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 2.7722046200884 \cdot 10^{-310}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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(-x.re\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r629327 = x_re;
double r629328 = r629327 * r629327;
double r629329 = x_im;
double r629330 = r629329 * r629329;
double r629331 = r629328 + r629330;
double r629332 = sqrt(r629331);
double r629333 = log(r629332);
double r629334 = y_re;
double r629335 = r629333 * r629334;
double r629336 = atan2(r629329, r629327);
double r629337 = y_im;
double r629338 = r629336 * r629337;
double r629339 = r629335 - r629338;
double r629340 = exp(r629339);
double r629341 = r629333 * r629337;
double r629342 = r629336 * r629334;
double r629343 = r629341 + r629342;
double r629344 = sin(r629343);
double r629345 = r629340 * r629344;
return r629345;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r629346 = x_re;
double r629347 = 2.7722046200884e-310;
bool r629348 = r629346 <= r629347;
double r629349 = y_re;
double r629350 = r629346 * r629346;
double r629351 = x_im;
double r629352 = r629351 * r629351;
double r629353 = r629350 + r629352;
double r629354 = sqrt(r629353);
double r629355 = log(r629354);
double r629356 = r629349 * r629355;
double r629357 = atan2(r629351, r629346);
double r629358 = y_im;
double r629359 = r629357 * r629358;
double r629360 = r629356 - r629359;
double r629361 = exp(r629360);
double r629362 = r629357 * r629349;
double r629363 = -r629346;
double r629364 = log(r629363);
double r629365 = r629358 * r629364;
double r629366 = r629362 + r629365;
double r629367 = sin(r629366);
double r629368 = r629361 * r629367;
double r629369 = log(r629346);
double r629370 = r629358 * r629369;
double r629371 = r629362 + r629370;
double r629372 = sin(r629371);
double r629373 = r629372 * r629361;
double r629374 = r629348 ? r629368 : r629373;
return r629374;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 2.7722046200884e-310Initial program 31.8
Taylor expanded around -inf 20.8
Simplified20.8
if 2.7722046200884e-310 < x.re Initial program 34.0
Taylor expanded around inf 24.8
Final simplification22.9
herbie shell --seed 2019156
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
(* (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)))))