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 -1.193476033015443119540477760055720733962 \cdot 10^{-301}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}} \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right) \cdot y.im\right)} \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 - \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}} \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right) \cdot y.im\right)} \cdot \sin \left(\log x.re \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r16851 = x_re;
double r16852 = r16851 * r16851;
double r16853 = x_im;
double r16854 = r16853 * r16853;
double r16855 = r16852 + r16854;
double r16856 = sqrt(r16855);
double r16857 = log(r16856);
double r16858 = y_re;
double r16859 = r16857 * r16858;
double r16860 = atan2(r16853, r16851);
double r16861 = y_im;
double r16862 = r16860 * r16861;
double r16863 = r16859 - r16862;
double r16864 = exp(r16863);
double r16865 = r16857 * r16861;
double r16866 = r16860 * r16858;
double r16867 = r16865 + r16866;
double r16868 = sin(r16867);
double r16869 = r16864 * r16868;
return r16869;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16870 = x_re;
double r16871 = -1.1934760330154431e-301;
bool r16872 = r16870 <= r16871;
double r16873 = r16870 * r16870;
double r16874 = x_im;
double r16875 = r16874 * r16874;
double r16876 = r16873 + r16875;
double r16877 = sqrt(r16876);
double r16878 = log(r16877);
double r16879 = y_re;
double r16880 = r16878 * r16879;
double r16881 = atan2(r16874, r16870);
double r16882 = cbrt(r16881);
double r16883 = r16882 * r16882;
double r16884 = cbrt(r16883);
double r16885 = cbrt(r16882);
double r16886 = r16884 * r16885;
double r16887 = y_im;
double r16888 = r16886 * r16887;
double r16889 = r16883 * r16888;
double r16890 = r16880 - r16889;
double r16891 = exp(r16890);
double r16892 = r16881 * r16879;
double r16893 = -1.0;
double r16894 = r16893 / r16870;
double r16895 = log(r16894);
double r16896 = r16887 * r16895;
double r16897 = r16892 - r16896;
double r16898 = sin(r16897);
double r16899 = r16891 * r16898;
double r16900 = log(r16870);
double r16901 = r16900 * r16887;
double r16902 = r16901 + r16892;
double r16903 = sin(r16902);
double r16904 = r16891 * r16903;
double r16905 = r16872 ? r16899 : r16904;
return r16905;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -1.1934760330154431e-301Initial program 32.6
rmApplied add-cube-cbrt32.6
Applied associate-*l*32.6
rmApplied add-cube-cbrt32.6
Applied cbrt-prod32.6
Taylor expanded around -inf 21.0
if -1.1934760330154431e-301 < x.re Initial program 35.1
rmApplied add-cube-cbrt35.1
Applied associate-*l*35.1
rmApplied add-cube-cbrt35.1
Applied cbrt-prod35.1
Taylor expanded around inf 25.5
Final simplification23.3
herbie shell --seed 2019346
(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)))))