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}\;y.re \le -28090542014645.81:\\
\;\;\;\;e^{\log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(-x.re\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 r545027 = x_re;
double r545028 = r545027 * r545027;
double r545029 = x_im;
double r545030 = r545029 * r545029;
double r545031 = r545028 + r545030;
double r545032 = sqrt(r545031);
double r545033 = log(r545032);
double r545034 = y_re;
double r545035 = r545033 * r545034;
double r545036 = atan2(r545029, r545027);
double r545037 = y_im;
double r545038 = r545036 * r545037;
double r545039 = r545035 - r545038;
double r545040 = exp(r545039);
double r545041 = r545033 * r545037;
double r545042 = r545036 * r545034;
double r545043 = r545041 + r545042;
double r545044 = cos(r545043);
double r545045 = r545040 * r545044;
return r545045;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r545046 = y_re;
double r545047 = -28090542014645.81;
bool r545048 = r545046 <= r545047;
double r545049 = x_im;
double r545050 = r545049 * r545049;
double r545051 = x_re;
double r545052 = r545051 * r545051;
double r545053 = r545050 + r545052;
double r545054 = sqrt(r545053);
double r545055 = log(r545054);
double r545056 = r545055 * r545046;
double r545057 = atan2(r545049, r545051);
double r545058 = y_im;
double r545059 = r545057 * r545058;
double r545060 = r545056 - r545059;
double r545061 = exp(r545060);
double r545062 = -r545051;
double r545063 = log(r545062);
double r545064 = r545046 * r545063;
double r545065 = r545064 - r545059;
double r545066 = exp(r545065);
double r545067 = r545048 ? r545061 : r545066;
return r545067;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -28090542014645.81Initial program 36.1
Taylor expanded around 0 0
if -28090542014645.81 < y.re Initial program 28.2
Taylor expanded around 0 25.2
Taylor expanded around -inf 0.5
Simplified0.5
Final simplification0.3
herbie shell --seed 2019104
(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)))))