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 -4.1355045148069 \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 r623546 = x_re;
double r623547 = r623546 * r623546;
double r623548 = x_im;
double r623549 = r623548 * r623548;
double r623550 = r623547 + r623549;
double r623551 = sqrt(r623550);
double r623552 = log(r623551);
double r623553 = y_re;
double r623554 = r623552 * r623553;
double r623555 = atan2(r623548, r623546);
double r623556 = y_im;
double r623557 = r623555 * r623556;
double r623558 = r623554 - r623557;
double r623559 = exp(r623558);
double r623560 = r623552 * r623556;
double r623561 = r623555 * r623553;
double r623562 = r623560 + r623561;
double r623563 = sin(r623562);
double r623564 = r623559 * r623563;
return r623564;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r623565 = x_re;
double r623566 = -4.1355045148069e-310;
bool r623567 = r623565 <= r623566;
double r623568 = y_re;
double r623569 = r623565 * r623565;
double r623570 = x_im;
double r623571 = r623570 * r623570;
double r623572 = r623569 + r623571;
double r623573 = sqrt(r623572);
double r623574 = log(r623573);
double r623575 = r623568 * r623574;
double r623576 = atan2(r623570, r623565);
double r623577 = y_im;
double r623578 = r623576 * r623577;
double r623579 = r623575 - r623578;
double r623580 = exp(r623579);
double r623581 = r623576 * r623568;
double r623582 = -r623565;
double r623583 = log(r623582);
double r623584 = r623577 * r623583;
double r623585 = r623581 + r623584;
double r623586 = sin(r623585);
double r623587 = r623580 * r623586;
double r623588 = log(r623565);
double r623589 = r623577 * r623588;
double r623590 = r623581 + r623589;
double r623591 = sin(r623590);
double r623592 = r623591 * r623580;
double r623593 = r623567 ? r623587 : r623592;
return r623593;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.1355045148069e-310Initial program 31.3
Taylor expanded around -inf 20.2
Simplified20.2
if -4.1355045148069e-310 < x.re Initial program 33.5
Taylor expanded around inf 24.2
Final simplification22.3
herbie shell --seed 2019151
(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)))))