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.91061712121799 \cdot 10^{-310}:\\
\;\;\;\;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(-1 \cdot x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\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(\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 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(\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 r22932 = x_re;
double r22933 = r22932 * r22932;
double r22934 = x_im;
double r22935 = r22934 * r22934;
double r22936 = r22933 + r22935;
double r22937 = sqrt(r22936);
double r22938 = log(r22937);
double r22939 = y_re;
double r22940 = r22938 * r22939;
double r22941 = atan2(r22934, r22932);
double r22942 = y_im;
double r22943 = r22941 * r22942;
double r22944 = r22940 - r22943;
double r22945 = exp(r22944);
double r22946 = r22938 * r22942;
double r22947 = r22941 * r22939;
double r22948 = r22946 + r22947;
double r22949 = sin(r22948);
double r22950 = r22945 * r22949;
return r22950;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r22951 = x_re;
double r22952 = 4.910617121218e-310;
bool r22953 = r22951 <= r22952;
double r22954 = r22951 * r22951;
double r22955 = x_im;
double r22956 = r22955 * r22955;
double r22957 = r22954 + r22956;
double r22958 = sqrt(r22957);
double r22959 = log(r22958);
double r22960 = y_re;
double r22961 = r22959 * r22960;
double r22962 = atan2(r22955, r22951);
double r22963 = y_im;
double r22964 = r22962 * r22963;
double r22965 = r22961 - r22964;
double r22966 = exp(r22965);
double r22967 = -1.0;
double r22968 = r22967 * r22951;
double r22969 = log(r22968);
double r22970 = r22969 * r22963;
double r22971 = r22962 * r22960;
double r22972 = r22970 + r22971;
double r22973 = sin(r22972);
double r22974 = r22966 * r22973;
double r22975 = 3.081011543928129e-170;
bool r22976 = r22951 <= r22975;
double r22977 = 1.0;
double r22978 = r22977 / r22951;
double r22979 = log(r22978);
double r22980 = r22963 * r22979;
double r22981 = r22971 - r22980;
double r22982 = sin(r22981);
double r22983 = r22966 * r22982;
double r22984 = 1.3997201639137561e-73;
bool r22985 = r22951 <= r22984;
double r22986 = cbrt(r22957);
double r22987 = fabs(r22986);
double r22988 = sqrt(r22986);
double r22989 = r22987 * r22988;
double r22990 = log(r22989);
double r22991 = r22990 * r22963;
double r22992 = r22991 + r22971;
double r22993 = sin(r22992);
double r22994 = r22966 * r22993;
double r22995 = r22985 ? r22994 : r22983;
double r22996 = r22976 ? r22983 : r22995;
double r22997 = r22953 ? r22974 : r22996;
return r22997;
}



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.910617121218e-310Initial program 31.4
Taylor expanded around -inf 20.1
if 4.910617121218e-310 < 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)))))