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.101377825655845965054518319850598018773 \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 r16849 = x_re;
double r16850 = r16849 * r16849;
double r16851 = x_im;
double r16852 = r16851 * r16851;
double r16853 = r16850 + r16852;
double r16854 = sqrt(r16853);
double r16855 = log(r16854);
double r16856 = y_re;
double r16857 = r16855 * r16856;
double r16858 = atan2(r16851, r16849);
double r16859 = y_im;
double r16860 = r16858 * r16859;
double r16861 = r16857 - r16860;
double r16862 = exp(r16861);
double r16863 = r16855 * r16859;
double r16864 = r16858 * r16856;
double r16865 = r16863 + r16864;
double r16866 = sin(r16865);
double r16867 = r16862 * r16866;
return r16867;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16868 = x_re;
double r16869 = -5.101377825655846e-309;
bool r16870 = r16868 <= r16869;
double r16871 = r16868 * r16868;
double r16872 = x_im;
double r16873 = r16872 * r16872;
double r16874 = r16871 + r16873;
double r16875 = sqrt(r16874);
double r16876 = log(r16875);
double r16877 = y_re;
double r16878 = r16876 * r16877;
double r16879 = atan2(r16872, r16868);
double r16880 = y_im;
double r16881 = r16879 * r16880;
double r16882 = r16878 - r16881;
double r16883 = exp(r16882);
double r16884 = r16879 * r16877;
double r16885 = -1.0;
double r16886 = r16885 / r16868;
double r16887 = log(r16886);
double r16888 = r16880 * r16887;
double r16889 = r16884 - r16888;
double r16890 = sin(r16889);
double r16891 = r16883 * r16890;
double r16892 = 1.0;
double r16893 = r16892 / r16868;
double r16894 = log(r16893);
double r16895 = r16880 * r16894;
double r16896 = r16884 - r16895;
double r16897 = sin(r16896);
double r16898 = r16883 * r16897;
double r16899 = r16870 ? r16891 : r16898;
return r16899;
}



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.101377825655846e-309Initial program 31.7
Taylor expanded around -inf 20.5
if -5.101377825655846e-309 < x.re Initial program 34.9
Taylor expanded around inf 24.6
Final simplification22.6
herbie shell --seed 2019353
(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)))))