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 8.59677818788519 \cdot 10^{-311}:\\
\;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le 4.28554573389427564 \cdot 10^{-138}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le 8.97390856977364809 \cdot 10^{-114}:\\
\;\;\;\;e^{\log \left(\log \left(e^{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right)\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r16062 = x_re;
double r16063 = r16062 * r16062;
double r16064 = x_im;
double r16065 = r16064 * r16064;
double r16066 = r16063 + r16065;
double r16067 = sqrt(r16066);
double r16068 = log(r16067);
double r16069 = y_re;
double r16070 = r16068 * r16069;
double r16071 = atan2(r16064, r16062);
double r16072 = y_im;
double r16073 = r16071 * r16072;
double r16074 = r16070 - r16073;
double r16075 = exp(r16074);
double r16076 = r16068 * r16072;
double r16077 = r16071 * r16069;
double r16078 = r16076 + r16077;
double r16079 = cos(r16078);
double r16080 = r16075 * r16079;
return r16080;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16081 = x_re;
double r16082 = 8.5967781878852e-311;
bool r16083 = r16081 <= r16082;
double r16084 = -1.0;
double r16085 = r16084 * r16081;
double r16086 = log(r16085);
double r16087 = y_re;
double r16088 = r16086 * r16087;
double r16089 = x_im;
double r16090 = atan2(r16089, r16081);
double r16091 = y_im;
double r16092 = r16090 * r16091;
double r16093 = r16088 - r16092;
double r16094 = exp(r16093);
double r16095 = 1.0;
double r16096 = r16094 * r16095;
double r16097 = 4.2855457338942756e-138;
bool r16098 = r16081 <= r16097;
double r16099 = log(r16081);
double r16100 = r16099 * r16087;
double r16101 = r16100 - r16092;
double r16102 = exp(r16101);
double r16103 = r16102 * r16095;
double r16104 = 8.973908569773648e-114;
bool r16105 = r16081 <= r16104;
double r16106 = r16081 * r16081;
double r16107 = r16089 * r16089;
double r16108 = r16106 + r16107;
double r16109 = sqrt(r16108);
double r16110 = exp(r16109);
double r16111 = log(r16110);
double r16112 = log(r16111);
double r16113 = r16112 * r16087;
double r16114 = r16113 - r16092;
double r16115 = exp(r16114);
double r16116 = r16115 * r16095;
double r16117 = r16105 ? r16116 : r16103;
double r16118 = r16098 ? r16103 : r16117;
double r16119 = r16083 ? r16096 : r16118;
return r16119;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 8.5967781878852e-311Initial program 31.7
Taylor expanded around 0 17.4
Taylor expanded around -inf 6.6
if 8.5967781878852e-311 < x.re < 4.2855457338942756e-138 or 8.973908569773648e-114 < x.re Initial program 36.1
Taylor expanded around 0 22.7
Taylor expanded around inf 12.5
if 4.2855457338942756e-138 < x.re < 8.973908569773648e-114Initial program 18.9
Taylor expanded around 0 10.9
rmApplied add-log-exp28.0
Final simplification9.9
herbie shell --seed 2020039
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
:precision binary64
(* (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)))))