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.567353220296205 \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 r25917 = x_re;
double r25918 = r25917 * r25917;
double r25919 = x_im;
double r25920 = r25919 * r25919;
double r25921 = r25918 + r25920;
double r25922 = sqrt(r25921);
double r25923 = log(r25922);
double r25924 = y_re;
double r25925 = r25923 * r25924;
double r25926 = atan2(r25919, r25917);
double r25927 = y_im;
double r25928 = r25926 * r25927;
double r25929 = r25925 - r25928;
double r25930 = exp(r25929);
double r25931 = r25923 * r25927;
double r25932 = r25926 * r25924;
double r25933 = r25931 + r25932;
double r25934 = sin(r25933);
double r25935 = r25930 * r25934;
return r25935;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25936 = x_re;
double r25937 = -5.567353220296205e-309;
bool r25938 = r25936 <= r25937;
double r25939 = r25936 * r25936;
double r25940 = x_im;
double r25941 = r25940 * r25940;
double r25942 = r25939 + r25941;
double r25943 = sqrt(r25942);
double r25944 = log(r25943);
double r25945 = y_re;
double r25946 = r25944 * r25945;
double r25947 = atan2(r25940, r25936);
double r25948 = y_im;
double r25949 = r25947 * r25948;
double r25950 = r25946 - r25949;
double r25951 = exp(r25950);
double r25952 = r25947 * r25945;
double r25953 = -1.0;
double r25954 = r25953 / r25936;
double r25955 = log(r25954);
double r25956 = r25948 * r25955;
double r25957 = r25952 - r25956;
double r25958 = sin(r25957);
double r25959 = r25951 * r25958;
double r25960 = log(r25936);
double r25961 = r25948 * r25960;
double r25962 = r25952 + r25961;
double r25963 = sin(r25962);
double r25964 = r25951 * r25963;
double r25965 = r25938 ? r25959 : r25964;
return r25965;
}



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.567353220296205e-309Initial program 31.7
Taylor expanded around -inf 20.8
if -5.567353220296205e-309 < x.re Initial program 35.0
rmApplied add-cube-cbrt35.0
Taylor expanded around inf 24.9
Simplified24.9
Final simplification22.9
herbie shell --seed 2019198
(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)))))