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 -2759744.9040251518599689006805419921875:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -5.32610268211259449984213034556843154695 \cdot 10^{-30}:\\
\;\;\;\;e^{\log \left(\log \left(e^{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right)\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -4.399901143579185647092718121671803160377 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log x.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 r1396156 = x_re;
double r1396157 = r1396156 * r1396156;
double r1396158 = x_im;
double r1396159 = r1396158 * r1396158;
double r1396160 = r1396157 + r1396159;
double r1396161 = sqrt(r1396160);
double r1396162 = log(r1396161);
double r1396163 = y_re;
double r1396164 = r1396162 * r1396163;
double r1396165 = atan2(r1396158, r1396156);
double r1396166 = y_im;
double r1396167 = r1396165 * r1396166;
double r1396168 = r1396164 - r1396167;
double r1396169 = exp(r1396168);
double r1396170 = r1396162 * r1396166;
double r1396171 = r1396165 * r1396163;
double r1396172 = r1396170 + r1396171;
double r1396173 = cos(r1396172);
double r1396174 = r1396169 * r1396173;
return r1396174;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1396175 = x_re;
double r1396176 = -2759744.904025152;
bool r1396177 = r1396175 <= r1396176;
double r1396178 = -r1396175;
double r1396179 = log(r1396178);
double r1396180 = y_re;
double r1396181 = r1396179 * r1396180;
double r1396182 = y_im;
double r1396183 = x_im;
double r1396184 = atan2(r1396183, r1396175);
double r1396185 = r1396182 * r1396184;
double r1396186 = r1396181 - r1396185;
double r1396187 = exp(r1396186);
double r1396188 = -5.3261026821125945e-30;
bool r1396189 = r1396175 <= r1396188;
double r1396190 = r1396175 * r1396175;
double r1396191 = r1396183 * r1396183;
double r1396192 = r1396190 + r1396191;
double r1396193 = sqrt(r1396192);
double r1396194 = exp(r1396193);
double r1396195 = log(r1396194);
double r1396196 = log(r1396195);
double r1396197 = r1396196 * r1396180;
double r1396198 = r1396197 - r1396185;
double r1396199 = exp(r1396198);
double r1396200 = -4.3999011435792e-310;
bool r1396201 = r1396175 <= r1396200;
double r1396202 = log(r1396175);
double r1396203 = r1396180 * r1396202;
double r1396204 = r1396203 - r1396185;
double r1396205 = exp(r1396204);
double r1396206 = r1396201 ? r1396187 : r1396205;
double r1396207 = r1396189 ? r1396199 : r1396206;
double r1396208 = r1396177 ? r1396187 : r1396207;
return r1396208;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -2759744.904025152 or -5.3261026821125945e-30 < x.re < -4.3999011435792e-310Initial program 32.6
Taylor expanded around 0 18.2
Taylor expanded around -inf 6.4
Simplified6.4
if -2759744.904025152 < x.re < -5.3261026821125945e-30Initial program 12.6
Taylor expanded around 0 6.7
rmApplied add-log-exp20.8
if -4.3999011435792e-310 < x.re Initial program 33.9
Taylor expanded around 0 20.9
Taylor expanded around inf 11.4
Simplified11.4
Final simplification9.3
herbie shell --seed 2019172
(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)))))