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 -1.0320343030662579 \cdot 10^{-39}:\\
\;\;\;\;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 -7.0065628327462943 \cdot 10^{-138}:\\
\;\;\;\;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 1\\
\mathbf{elif}\;x.re \le -1.596491671996702 \cdot 10^{-172}:\\
\;\;\;\;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 -6.9045443592551714 \cdot 10^{-255}:\\
\;\;\;\;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 1\\
\mathbf{elif}\;x.re \le -3.10085515308595001 \cdot 10^{-308}:\\
\;\;\;\;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 2.99263778611433918 \cdot 10^{-130}:\\
\;\;\;\;\frac{e^{-\log \left(e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}}{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot 1\\
\mathbf{elif}\;x.re \le 2.45124835309062439:\\
\;\;\;\;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 1\\
\mathbf{else}:\\
\;\;\;\;\frac{e^{-\log \left(e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}}{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot 1\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r11239 = x_re;
double r11240 = r11239 * r11239;
double r11241 = x_im;
double r11242 = r11241 * r11241;
double r11243 = r11240 + r11242;
double r11244 = sqrt(r11243);
double r11245 = log(r11244);
double r11246 = y_re;
double r11247 = r11245 * r11246;
double r11248 = atan2(r11241, r11239);
double r11249 = y_im;
double r11250 = r11248 * r11249;
double r11251 = r11247 - r11250;
double r11252 = exp(r11251);
double r11253 = r11245 * r11249;
double r11254 = r11248 * r11246;
double r11255 = r11253 + r11254;
double r11256 = cos(r11255);
double r11257 = r11252 * r11256;
return r11257;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r11258 = x_re;
double r11259 = -1.0320343030662579e-39;
bool r11260 = r11258 <= r11259;
double r11261 = -1.0;
double r11262 = r11261 * r11258;
double r11263 = log(r11262);
double r11264 = y_re;
double r11265 = r11263 * r11264;
double r11266 = x_im;
double r11267 = atan2(r11266, r11258);
double r11268 = y_im;
double r11269 = r11267 * r11268;
double r11270 = r11265 - r11269;
double r11271 = exp(r11270);
double r11272 = 1.0;
double r11273 = r11271 * r11272;
double r11274 = -7.006562832746294e-138;
bool r11275 = r11258 <= r11274;
double r11276 = r11258 * r11258;
double r11277 = r11266 * r11266;
double r11278 = r11276 + r11277;
double r11279 = sqrt(r11278);
double r11280 = log(r11279);
double r11281 = r11280 * r11264;
double r11282 = r11281 - r11269;
double r11283 = exp(r11282);
double r11284 = r11283 * r11272;
double r11285 = -1.5964916719967018e-172;
bool r11286 = r11258 <= r11285;
double r11287 = -6.904544359255171e-255;
bool r11288 = r11258 <= r11287;
double r11289 = -3.10085515308595e-308;
bool r11290 = r11258 <= r11289;
double r11291 = 2.992637786114339e-130;
bool r11292 = r11258 <= r11291;
double r11293 = exp(r11269);
double r11294 = log(r11293);
double r11295 = -r11294;
double r11296 = exp(r11295);
double r11297 = r11272 / r11258;
double r11298 = pow(r11297, r11264);
double r11299 = r11296 / r11298;
double r11300 = r11299 * r11272;
double r11301 = 2.4512483530906244;
bool r11302 = r11258 <= r11301;
double r11303 = r11302 ? r11284 : r11300;
double r11304 = r11292 ? r11300 : r11303;
double r11305 = r11290 ? r11273 : r11304;
double r11306 = r11288 ? r11284 : r11305;
double r11307 = r11286 ? r11273 : r11306;
double r11308 = r11275 ? r11284 : r11307;
double r11309 = r11260 ? r11273 : r11308;
return r11309;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -1.0320343030662579e-39 or -7.006562832746294e-138 < x.re < -1.5964916719967018e-172 or -6.904544359255171e-255 < x.re < -3.10085515308595e-308Initial program 34.7
Taylor expanded around 0 19.3
Taylor expanded around -inf 3.8
if -1.0320343030662579e-39 < x.re < -7.006562832746294e-138 or -1.5964916719967018e-172 < x.re < -6.904544359255171e-255 or 2.992637786114339e-130 < x.re < 2.4512483530906244Initial program 20.3
Taylor expanded around 0 11.7
if -3.10085515308595e-308 < x.re < 2.992637786114339e-130 or 2.4512483530906244 < x.re Initial program 38.9
Taylor expanded around 0 24.2
Taylor expanded around inf 11.5
Simplified14.9
rmApplied add-log-exp14.9
Final simplification10.3
herbie shell --seed 2020056
(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)))))