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.91324257936214 \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{elif}\;x.re \le 3.081011543928129 \cdot 10^{-170}:\\
\;\;\;\;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 x.re \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{elif}\;x.re \le 1.3997201639137561 \cdot 10^{-73}:\\
\;\;\;\;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(\left|\sqrt[3]{x.re \cdot x.re + x.im \cdot x.im}\right| \cdot \sqrt{\sqrt[3]{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)\\
\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(\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 r22861 = x_re;
double r22862 = r22861 * r22861;
double r22863 = x_im;
double r22864 = r22863 * r22863;
double r22865 = r22862 + r22864;
double r22866 = sqrt(r22865);
double r22867 = log(r22866);
double r22868 = y_re;
double r22869 = r22867 * r22868;
double r22870 = atan2(r22863, r22861);
double r22871 = y_im;
double r22872 = r22870 * r22871;
double r22873 = r22869 - r22872;
double r22874 = exp(r22873);
double r22875 = r22867 * r22871;
double r22876 = r22870 * r22868;
double r22877 = r22875 + r22876;
double r22878 = sin(r22877);
double r22879 = r22874 * r22878;
return r22879;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r22880 = x_re;
double r22881 = -4.91324257936214e-309;
bool r22882 = r22880 <= r22881;
double r22883 = r22880 * r22880;
double r22884 = x_im;
double r22885 = r22884 * r22884;
double r22886 = r22883 + r22885;
double r22887 = sqrt(r22886);
double r22888 = log(r22887);
double r22889 = y_re;
double r22890 = r22888 * r22889;
double r22891 = atan2(r22884, r22880);
double r22892 = y_im;
double r22893 = r22891 * r22892;
double r22894 = r22890 - r22893;
double r22895 = exp(r22894);
double r22896 = r22891 * r22889;
double r22897 = -1.0;
double r22898 = r22897 / r22880;
double r22899 = log(r22898);
double r22900 = r22892 * r22899;
double r22901 = r22896 - r22900;
double r22902 = sin(r22901);
double r22903 = r22895 * r22902;
double r22904 = 3.081011543928129e-170;
bool r22905 = r22880 <= r22904;
double r22906 = log(r22880);
double r22907 = r22906 * r22892;
double r22908 = r22907 + r22896;
double r22909 = sin(r22908);
double r22910 = r22895 * r22909;
double r22911 = 1.3997201639137561e-73;
bool r22912 = r22880 <= r22911;
double r22913 = cbrt(r22886);
double r22914 = fabs(r22913);
double r22915 = sqrt(r22913);
double r22916 = r22914 * r22915;
double r22917 = log(r22916);
double r22918 = r22917 * r22892;
double r22919 = r22918 + r22896;
double r22920 = sin(r22919);
double r22921 = r22895 * r22920;
double r22922 = r22912 ? r22921 : r22910;
double r22923 = r22905 ? r22910 : r22922;
double r22924 = r22882 ? r22903 : r22923;
return r22924;
}



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.91324257936214e-309Initial program 31.4
Taylor expanded around -inf 20.1
if -4.91324257936214e-309 < x.re < 3.081011543928129e-170 or 1.3997201639137561e-73 < x.re Initial program 37.2
Taylor expanded around inf 25.4
if 3.081011543928129e-170 < x.re < 1.3997201639137561e-73Initial program 16.9
rmApplied add-cube-cbrt16.9
Applied sqrt-prod16.9
Simplified16.9
Final simplification22.2
herbie shell --seed 2020062
(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)))))