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 -3.566576781276111012185154762547093345551 \cdot 10^{-310}:\\
\;\;\;\;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 + \log x.re \cdot y.im\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r24684 = x_re;
double r24685 = r24684 * r24684;
double r24686 = x_im;
double r24687 = r24686 * r24686;
double r24688 = r24685 + r24687;
double r24689 = sqrt(r24688);
double r24690 = log(r24689);
double r24691 = y_re;
double r24692 = r24690 * r24691;
double r24693 = atan2(r24686, r24684);
double r24694 = y_im;
double r24695 = r24693 * r24694;
double r24696 = r24692 - r24695;
double r24697 = exp(r24696);
double r24698 = r24690 * r24694;
double r24699 = r24693 * r24691;
double r24700 = r24698 + r24699;
double r24701 = sin(r24700);
double r24702 = r24697 * r24701;
return r24702;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r24703 = x_re;
double r24704 = -3.5665767812761e-310;
bool r24705 = r24703 <= r24704;
double r24706 = r24703 * r24703;
double r24707 = x_im;
double r24708 = r24707 * r24707;
double r24709 = r24706 + r24708;
double r24710 = sqrt(r24709);
double r24711 = log(r24710);
double r24712 = y_re;
double r24713 = r24711 * r24712;
double r24714 = atan2(r24707, r24703);
double r24715 = y_im;
double r24716 = r24714 * r24715;
double r24717 = r24713 - r24716;
double r24718 = exp(r24717);
double r24719 = -r24703;
double r24720 = log(r24719);
double r24721 = r24720 * r24715;
double r24722 = r24714 * r24712;
double r24723 = r24721 + r24722;
double r24724 = sin(r24723);
double r24725 = r24718 * r24724;
double r24726 = log(r24703);
double r24727 = r24726 * r24715;
double r24728 = r24722 + r24727;
double r24729 = sin(r24728);
double r24730 = r24718 * r24729;
double r24731 = r24705 ? r24725 : r24730;
return r24731;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -3.5665767812761e-310Initial program 32.0
Taylor expanded around -inf 19.7
Simplified19.7
if -3.5665767812761e-310 < x.re Initial program 35.3
Taylor expanded around inf 24.2
Simplified24.2
Final simplification22.0
herbie shell --seed 2019323
(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)))))