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 \cos \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 -7.316830147106013741421501992963017986241 \cdot 10^{-306}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1337954 = x_re;
double r1337955 = r1337954 * r1337954;
double r1337956 = x_im;
double r1337957 = r1337956 * r1337956;
double r1337958 = r1337955 + r1337957;
double r1337959 = sqrt(r1337958);
double r1337960 = log(r1337959);
double r1337961 = y_re;
double r1337962 = r1337960 * r1337961;
double r1337963 = atan2(r1337956, r1337954);
double r1337964 = y_im;
double r1337965 = r1337963 * r1337964;
double r1337966 = r1337962 - r1337965;
double r1337967 = exp(r1337966);
double r1337968 = r1337960 * r1337964;
double r1337969 = r1337963 * r1337961;
double r1337970 = r1337968 + r1337969;
double r1337971 = cos(r1337970);
double r1337972 = r1337967 * r1337971;
return r1337972;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1337973 = x_re;
double r1337974 = -7.316830147106014e-306;
bool r1337975 = r1337973 <= r1337974;
double r1337976 = -r1337973;
double r1337977 = log(r1337976);
double r1337978 = y_re;
double r1337979 = r1337977 * r1337978;
double r1337980 = y_im;
double r1337981 = x_im;
double r1337982 = atan2(r1337981, r1337973);
double r1337983 = r1337980 * r1337982;
double r1337984 = r1337979 - r1337983;
double r1337985 = exp(r1337984);
double r1337986 = log(r1337973);
double r1337987 = r1337986 * r1337978;
double r1337988 = r1337987 - r1337983;
double r1337989 = exp(r1337988);
double r1337990 = r1337975 ? r1337985 : r1337989;
return r1337990;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -7.316830147106014e-306Initial program 31.5
Taylor expanded around 0 17.1
Taylor expanded around -inf 5.8
Simplified5.8
if -7.316830147106014e-306 < x.re Initial program 35.3
Taylor expanded around 0 21.9
Taylor expanded around inf 12.2
Final simplification9.1
herbie shell --seed 2019170
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))