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 -4.528905539070835862010144863323093228061 \cdot 10^{-244}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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(-x.re\right)\right)\\
\mathbf{elif}\;x.re \le 4.951028208641396530665007932800717948757 \cdot 10^{107}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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(\sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}} \cdot \left(\sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}} \cdot \sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\log x.re \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1535844 = x_re;
double r1535845 = r1535844 * r1535844;
double r1535846 = x_im;
double r1535847 = r1535846 * r1535846;
double r1535848 = r1535845 + r1535847;
double r1535849 = sqrt(r1535848);
double r1535850 = log(r1535849);
double r1535851 = y_re;
double r1535852 = r1535850 * r1535851;
double r1535853 = atan2(r1535846, r1535844);
double r1535854 = y_im;
double r1535855 = r1535853 * r1535854;
double r1535856 = r1535852 - r1535855;
double r1535857 = exp(r1535856);
double r1535858 = r1535850 * r1535854;
double r1535859 = r1535853 * r1535851;
double r1535860 = r1535858 + r1535859;
double r1535861 = sin(r1535860);
double r1535862 = r1535857 * r1535861;
return r1535862;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1535863 = x_re;
double r1535864 = -4.528905539070836e-244;
bool r1535865 = r1535863 <= r1535864;
double r1535866 = y_re;
double r1535867 = r1535863 * r1535863;
double r1535868 = x_im;
double r1535869 = r1535868 * r1535868;
double r1535870 = r1535867 + r1535869;
double r1535871 = sqrt(r1535870);
double r1535872 = log(r1535871);
double r1535873 = r1535866 * r1535872;
double r1535874 = atan2(r1535868, r1535863);
double r1535875 = y_im;
double r1535876 = r1535874 * r1535875;
double r1535877 = r1535873 - r1535876;
double r1535878 = exp(r1535877);
double r1535879 = r1535874 * r1535866;
double r1535880 = -r1535863;
double r1535881 = log(r1535880);
double r1535882 = r1535875 * r1535881;
double r1535883 = r1535879 + r1535882;
double r1535884 = sin(r1535883);
double r1535885 = r1535878 * r1535884;
double r1535886 = 4.9510282086413965e+107;
bool r1535887 = r1535863 <= r1535886;
double r1535888 = cbrt(r1535871);
double r1535889 = r1535888 * r1535888;
double r1535890 = r1535888 * r1535889;
double r1535891 = log(r1535890);
double r1535892 = r1535875 * r1535891;
double r1535893 = r1535879 + r1535892;
double r1535894 = sin(r1535893);
double r1535895 = r1535878 * r1535894;
double r1535896 = log(r1535863);
double r1535897 = r1535896 * r1535875;
double r1535898 = r1535897 + r1535879;
double r1535899 = sin(r1535898);
double r1535900 = r1535899 * r1535878;
double r1535901 = r1535887 ? r1535895 : r1535900;
double r1535902 = r1535865 ? r1535885 : r1535901;
return r1535902;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.528905539070836e-244Initial program 32.3
Taylor expanded around -inf 19.7
Simplified19.7
if -4.528905539070836e-244 < x.re < 4.9510282086413965e+107Initial program 25.6
rmApplied add-cube-cbrt25.6
if 4.9510282086413965e+107 < x.re Initial program 54.6
Taylor expanded around inf 35.7
Simplified35.7
Final simplification24.8
herbie shell --seed 2019169
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
(* (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)))))