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 -8.6257611592827 \cdot 10^{-311}:\\
\;\;\;\;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 r613533 = x_re;
double r613534 = r613533 * r613533;
double r613535 = x_im;
double r613536 = r613535 * r613535;
double r613537 = r613534 + r613536;
double r613538 = sqrt(r613537);
double r613539 = log(r613538);
double r613540 = y_re;
double r613541 = r613539 * r613540;
double r613542 = atan2(r613535, r613533);
double r613543 = y_im;
double r613544 = r613542 * r613543;
double r613545 = r613541 - r613544;
double r613546 = exp(r613545);
double r613547 = r613539 * r613543;
double r613548 = r613542 * r613540;
double r613549 = r613547 + r613548;
double r613550 = sin(r613549);
double r613551 = r613546 * r613550;
return r613551;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r613552 = x_re;
double r613553 = -8.6257611592827e-311;
bool r613554 = r613552 <= r613553;
double r613555 = y_re;
double r613556 = r613552 * r613552;
double r613557 = x_im;
double r613558 = r613557 * r613557;
double r613559 = r613556 + r613558;
double r613560 = sqrt(r613559);
double r613561 = log(r613560);
double r613562 = r613555 * r613561;
double r613563 = atan2(r613557, r613552);
double r613564 = y_im;
double r613565 = r613563 * r613564;
double r613566 = r613562 - r613565;
double r613567 = exp(r613566);
double r613568 = r613563 * r613555;
double r613569 = -r613552;
double r613570 = log(r613569);
double r613571 = r613564 * r613570;
double r613572 = r613568 + r613571;
double r613573 = sin(r613572);
double r613574 = r613567 * r613573;
double r613575 = log(r613552);
double r613576 = r613564 * r613575;
double r613577 = r613568 + r613576;
double r613578 = sin(r613577);
double r613579 = r613578 * r613567;
double r613580 = r613554 ? r613574 : r613579;
return r613580;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -8.6257611592827e-311Initial program 31.1
Taylor expanded around -inf 21.2
Simplified21.2
if -8.6257611592827e-311 < x.re Initial program 34.8
Taylor expanded around inf 24.4
Final simplification22.8
herbie shell --seed 2019154
(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)))))