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 r16871 = x_re;
double r16872 = r16871 * r16871;
double r16873 = x_im;
double r16874 = r16873 * r16873;
double r16875 = r16872 + r16874;
double r16876 = sqrt(r16875);
double r16877 = log(r16876);
double r16878 = y_re;
double r16879 = r16877 * r16878;
double r16880 = atan2(r16873, r16871);
double r16881 = y_im;
double r16882 = r16880 * r16881;
double r16883 = r16879 - r16882;
double r16884 = exp(r16883);
double r16885 = r16877 * r16881;
double r16886 = r16880 * r16878;
double r16887 = r16885 + r16886;
double r16888 = sin(r16887);
double r16889 = r16884 * r16888;
return r16889;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16890 = x_re;
double r16891 = -5.101377825655846e-309;
bool r16892 = r16890 <= r16891;
double r16893 = r16890 * r16890;
double r16894 = x_im;
double r16895 = r16894 * r16894;
double r16896 = r16893 + r16895;
double r16897 = sqrt(r16896);
double r16898 = log(r16897);
double r16899 = y_re;
double r16900 = r16898 * r16899;
double r16901 = atan2(r16894, r16890);
double r16902 = y_im;
double r16903 = r16901 * r16902;
double r16904 = r16900 - r16903;
double r16905 = exp(r16904);
double r16906 = r16901 * r16899;
double r16907 = -1.0;
double r16908 = r16907 / r16890;
double r16909 = log(r16908);
double r16910 = r16902 * r16909;
double r16911 = r16906 - r16910;
double r16912 = sin(r16911);
double r16913 = r16905 * r16912;
double r16914 = 1.0;
double r16915 = r16914 / r16890;
double r16916 = log(r16915);
double r16917 = r16902 * r16916;
double r16918 = r16906 - r16917;
double r16919 = sin(r16918);
double r16920 = r16905 * r16919;
double r16921 = r16892 ? r16913 : r16920;
return r16921;
}



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
rmApplied add-cbrt-cube37.1
Simplified37.1
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)))))