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 -5.724933428581658 \cdot 10^{-309}:\\
\;\;\;\;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 - y.im \cdot \log \left(\frac{-1}{x.re}\right)\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 - y.im \cdot \log \left(\frac{1}{x.re}\right)\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r18795 = x_re;
double r18796 = r18795 * r18795;
double r18797 = x_im;
double r18798 = r18797 * r18797;
double r18799 = r18796 + r18798;
double r18800 = sqrt(r18799);
double r18801 = log(r18800);
double r18802 = y_re;
double r18803 = r18801 * r18802;
double r18804 = atan2(r18797, r18795);
double r18805 = y_im;
double r18806 = r18804 * r18805;
double r18807 = r18803 - r18806;
double r18808 = exp(r18807);
double r18809 = r18801 * r18805;
double r18810 = r18804 * r18802;
double r18811 = r18809 + r18810;
double r18812 = sin(r18811);
double r18813 = r18808 * r18812;
return r18813;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r18814 = x_re;
double r18815 = -5.72493342858166e-309;
bool r18816 = r18814 <= r18815;
double r18817 = r18814 * r18814;
double r18818 = x_im;
double r18819 = r18818 * r18818;
double r18820 = r18817 + r18819;
double r18821 = sqrt(r18820);
double r18822 = log(r18821);
double r18823 = y_re;
double r18824 = r18822 * r18823;
double r18825 = atan2(r18818, r18814);
double r18826 = y_im;
double r18827 = r18825 * r18826;
double r18828 = r18824 - r18827;
double r18829 = exp(r18828);
double r18830 = r18825 * r18823;
double r18831 = -1.0;
double r18832 = r18831 / r18814;
double r18833 = log(r18832);
double r18834 = r18826 * r18833;
double r18835 = r18830 - r18834;
double r18836 = sin(r18835);
double r18837 = r18829 * r18836;
double r18838 = 1.0;
double r18839 = r18838 / r18814;
double r18840 = log(r18839);
double r18841 = r18826 * r18840;
double r18842 = r18830 - r18841;
double r18843 = sin(r18842);
double r18844 = r18829 * r18843;
double r18845 = r18816 ? r18837 : r18844;
return r18845;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -5.72493342858166e-309Initial program 31.3
Taylor expanded around -inf 19.7
if -5.72493342858166e-309 < x.re Initial program 34.5
rmApplied add-cube-cbrt34.6
Applied associate-*r*34.6
Taylor expanded around inf 24.2
Final simplification22.0
herbie shell --seed 2020021
(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)))))