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.399901143579185647092718121671803160377 \cdot 10^{-310}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot \left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}\right)\right) \cdot \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.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 r1426906 = x_re;
double r1426907 = r1426906 * r1426906;
double r1426908 = x_im;
double r1426909 = r1426908 * r1426908;
double r1426910 = r1426907 + r1426909;
double r1426911 = sqrt(r1426910);
double r1426912 = log(r1426911);
double r1426913 = y_re;
double r1426914 = r1426912 * r1426913;
double r1426915 = atan2(r1426908, r1426906);
double r1426916 = y_im;
double r1426917 = r1426915 * r1426916;
double r1426918 = r1426914 - r1426917;
double r1426919 = exp(r1426918);
double r1426920 = r1426912 * r1426916;
double r1426921 = r1426915 * r1426913;
double r1426922 = r1426920 + r1426921;
double r1426923 = sin(r1426922);
double r1426924 = r1426919 * r1426923;
return r1426924;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1426925 = x_re;
double r1426926 = -4.3999011435792e-310;
bool r1426927 = r1426925 <= r1426926;
double r1426928 = x_im;
double r1426929 = atan2(r1426928, r1426925);
double r1426930 = y_re;
double r1426931 = r1426929 * r1426930;
double r1426932 = y_im;
double r1426933 = -r1426925;
double r1426934 = log(r1426933);
double r1426935 = r1426932 * r1426934;
double r1426936 = r1426931 + r1426935;
double r1426937 = sin(r1426936);
double r1426938 = r1426925 * r1426925;
double r1426939 = r1426928 * r1426928;
double r1426940 = r1426938 + r1426939;
double r1426941 = sqrt(r1426940);
double r1426942 = log(r1426941);
double r1426943 = r1426930 * r1426942;
double r1426944 = r1426929 * r1426932;
double r1426945 = cbrt(r1426944);
double r1426946 = cbrt(r1426945);
double r1426947 = r1426946 * r1426946;
double r1426948 = r1426946 * r1426947;
double r1426949 = r1426945 * r1426945;
double r1426950 = r1426948 * r1426949;
double r1426951 = r1426943 - r1426950;
double r1426952 = exp(r1426951);
double r1426953 = r1426937 * r1426952;
double r1426954 = log(r1426925);
double r1426955 = r1426932 * r1426954;
double r1426956 = r1426931 + r1426955;
double r1426957 = sin(r1426956);
double r1426958 = r1426943 - r1426944;
double r1426959 = exp(r1426958);
double r1426960 = r1426957 * r1426959;
double r1426961 = r1426927 ? r1426953 : r1426960;
return r1426961;
}



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.3999011435792e-310Initial program 31.5
rmApplied add-cube-cbrt31.5
rmApplied add-cube-cbrt31.5
Taylor expanded around -inf 20.2
Simplified20.2
if -4.3999011435792e-310 < x.re Initial program 33.9
Taylor expanded around inf 23.7
Final simplification22.0
herbie shell --seed 2019172
(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)))))