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}\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.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} \le 1.1028388215796683 \cdot 10^{-32}:\\
\;\;\;\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.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}\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right) \cdot e^{\log \left(-x.re\right) \cdot y.re - \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 r1032553 = x_re;
double r1032554 = r1032553 * r1032553;
double r1032555 = x_im;
double r1032556 = r1032555 * r1032555;
double r1032557 = r1032554 + r1032556;
double r1032558 = sqrt(r1032557);
double r1032559 = log(r1032558);
double r1032560 = y_re;
double r1032561 = r1032559 * r1032560;
double r1032562 = atan2(r1032555, r1032553);
double r1032563 = y_im;
double r1032564 = r1032562 * r1032563;
double r1032565 = r1032561 - r1032564;
double r1032566 = exp(r1032565);
double r1032567 = r1032559 * r1032563;
double r1032568 = r1032562 * r1032560;
double r1032569 = r1032567 + r1032568;
double r1032570 = sin(r1032569);
double r1032571 = r1032566 * r1032570;
return r1032571;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1032572 = y_im;
double r1032573 = x_re;
double r1032574 = r1032573 * r1032573;
double r1032575 = x_im;
double r1032576 = r1032575 * r1032575;
double r1032577 = r1032574 + r1032576;
double r1032578 = sqrt(r1032577);
double r1032579 = log(r1032578);
double r1032580 = r1032572 * r1032579;
double r1032581 = atan2(r1032575, r1032573);
double r1032582 = y_re;
double r1032583 = r1032581 * r1032582;
double r1032584 = r1032580 + r1032583;
double r1032585 = sin(r1032584);
double r1032586 = r1032582 * r1032579;
double r1032587 = r1032581 * r1032572;
double r1032588 = r1032586 - r1032587;
double r1032589 = exp(r1032588);
double r1032590 = r1032585 * r1032589;
double r1032591 = 1.1028388215796683e-32;
bool r1032592 = r1032590 <= r1032591;
double r1032593 = -r1032573;
double r1032594 = log(r1032593);
double r1032595 = r1032572 * r1032594;
double r1032596 = r1032583 + r1032595;
double r1032597 = sin(r1032596);
double r1032598 = r1032594 * r1032582;
double r1032599 = r1032598 - r1032587;
double r1032600 = exp(r1032599);
double r1032601 = r1032597 * r1032600;
double r1032602 = r1032592 ? r1032590 : r1032601;
return r1032602;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (* (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)))) < 1.1028388215796683e-32Initial program 0.1
if 1.1028388215796683e-32 < (* (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)))) Initial program 61.8
Taylor expanded around -inf 21.8
Simplified21.8
Taylor expanded around -inf 20.9
Simplified20.9
Final simplification10.4
herbie shell --seed 2019134
(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)))))