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 -6.9564220004280769 \cdot 10^{-25}:\\
\;\;\;\;e^{\log \left(-x.re\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 -5.5143999901026958 \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 x.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r16917 = x_re;
double r16918 = r16917 * r16917;
double r16919 = x_im;
double r16920 = r16919 * r16919;
double r16921 = r16918 + r16920;
double r16922 = sqrt(r16921);
double r16923 = log(r16922);
double r16924 = y_re;
double r16925 = r16923 * r16924;
double r16926 = atan2(r16919, r16917);
double r16927 = y_im;
double r16928 = r16926 * r16927;
double r16929 = r16925 - r16928;
double r16930 = exp(r16929);
double r16931 = r16923 * r16927;
double r16932 = r16926 * r16924;
double r16933 = r16931 + r16932;
double r16934 = sin(r16933);
double r16935 = r16930 * r16934;
return r16935;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16936 = x_re;
double r16937 = -6.956422000428077e-25;
bool r16938 = r16936 <= r16937;
double r16939 = -r16936;
double r16940 = log(r16939);
double r16941 = y_re;
double r16942 = r16940 * r16941;
double r16943 = x_im;
double r16944 = atan2(r16943, r16936);
double r16945 = y_im;
double r16946 = r16944 * r16945;
double r16947 = r16942 - r16946;
double r16948 = exp(r16947);
double r16949 = r16944 * r16941;
double r16950 = -1.0;
double r16951 = r16950 / r16936;
double r16952 = log(r16951);
double r16953 = r16945 * r16952;
double r16954 = r16949 - r16953;
double r16955 = sin(r16954);
double r16956 = r16948 * r16955;
double r16957 = -5.514399990102696e-309;
bool r16958 = r16936 <= r16957;
double r16959 = r16936 * r16936;
double r16960 = r16943 * r16943;
double r16961 = r16959 + r16960;
double r16962 = sqrt(r16961);
double r16963 = log(r16962);
double r16964 = r16963 * r16941;
double r16965 = r16964 - r16946;
double r16966 = exp(r16965);
double r16967 = r16966 * r16955;
double r16968 = log(r16936);
double r16969 = r16945 * r16968;
double r16970 = r16949 + r16969;
double r16971 = sin(r16970);
double r16972 = r16966 * r16971;
double r16973 = r16958 ? r16967 : r16972;
double r16974 = r16938 ? r16956 : r16973;
return r16974;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -6.956422000428077e-25Initial program 38.3
rmApplied add-cube-cbrt38.3
Taylor expanded around -inf 21.8
Taylor expanded around -inf 4.3
Simplified4.3
if -6.956422000428077e-25 < x.re < -5.514399990102696e-309Initial program 24.3
rmApplied add-cube-cbrt24.3
Taylor expanded around -inf 18.2
if -5.514399990102696e-309 < x.re Initial program 35.5
Taylor expanded around inf 24.3
Simplified24.4
Final simplification17.6
herbie shell --seed 2020046
(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)))))