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}:\\
\;\;\;\;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} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + \log x.re \cdot y.im\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1426817 = x_re;
double r1426818 = r1426817 * r1426817;
double r1426819 = x_im;
double r1426820 = r1426819 * r1426819;
double r1426821 = r1426818 + r1426820;
double r1426822 = sqrt(r1426821);
double r1426823 = log(r1426822);
double r1426824 = y_re;
double r1426825 = r1426823 * r1426824;
double r1426826 = atan2(r1426819, r1426817);
double r1426827 = y_im;
double r1426828 = r1426826 * r1426827;
double r1426829 = r1426825 - r1426828;
double r1426830 = exp(r1426829);
double r1426831 = r1426823 * r1426827;
double r1426832 = r1426826 * r1426824;
double r1426833 = r1426831 + r1426832;
double r1426834 = sin(r1426833);
double r1426835 = r1426830 * r1426834;
return r1426835;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1426836 = x_re;
double r1426837 = -4.3999011435792e-310;
bool r1426838 = r1426836 <= r1426837;
double r1426839 = x_im;
double r1426840 = atan2(r1426839, r1426836);
double r1426841 = y_re;
double r1426842 = r1426840 * r1426841;
double r1426843 = y_im;
double r1426844 = -r1426836;
double r1426845 = log(r1426844);
double r1426846 = r1426843 * r1426845;
double r1426847 = r1426842 + r1426846;
double r1426848 = sin(r1426847);
double r1426849 = r1426836 * r1426836;
double r1426850 = r1426839 * r1426839;
double r1426851 = r1426849 + r1426850;
double r1426852 = sqrt(r1426851);
double r1426853 = log(r1426852);
double r1426854 = r1426841 * r1426853;
double r1426855 = r1426840 * r1426843;
double r1426856 = cbrt(r1426855);
double r1426857 = cbrt(r1426856);
double r1426858 = r1426857 * r1426857;
double r1426859 = r1426857 * r1426858;
double r1426860 = r1426856 * r1426856;
double r1426861 = r1426859 * r1426860;
double r1426862 = r1426854 - r1426861;
double r1426863 = exp(r1426862);
double r1426864 = r1426848 * r1426863;
double r1426865 = r1426854 - r1426855;
double r1426866 = exp(r1426865);
double r1426867 = log(r1426836);
double r1426868 = r1426867 * r1426843;
double r1426869 = r1426842 + r1426868;
double r1426870 = sin(r1426869);
double r1426871 = r1426866 * r1426870;
double r1426872 = r1426838 ? r1426864 : r1426871;
return r1426872;
}



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
Simplified23.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)))))