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.8407009899098441 \cdot 10^{-06}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -2.9130712528480477 \cdot 10^{-164}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -4.2640896224449 \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 r1436384 = x_re;
double r1436385 = r1436384 * r1436384;
double r1436386 = x_im;
double r1436387 = r1436386 * r1436386;
double r1436388 = r1436385 + r1436387;
double r1436389 = sqrt(r1436388);
double r1436390 = log(r1436389);
double r1436391 = y_re;
double r1436392 = r1436390 * r1436391;
double r1436393 = atan2(r1436386, r1436384);
double r1436394 = y_im;
double r1436395 = r1436393 * r1436394;
double r1436396 = r1436392 - r1436395;
double r1436397 = exp(r1436396);
double r1436398 = r1436390 * r1436394;
double r1436399 = r1436393 * r1436391;
double r1436400 = r1436398 + r1436399;
double r1436401 = cos(r1436400);
double r1436402 = r1436397 * r1436401;
return r1436402;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1436403 = x_re;
double r1436404 = -1.8407009899098441e-06;
bool r1436405 = r1436403 <= r1436404;
double r1436406 = -r1436403;
double r1436407 = log(r1436406);
double r1436408 = y_re;
double r1436409 = r1436407 * r1436408;
double r1436410 = y_im;
double r1436411 = x_im;
double r1436412 = atan2(r1436411, r1436403);
double r1436413 = r1436410 * r1436412;
double r1436414 = r1436409 - r1436413;
double r1436415 = exp(r1436414);
double r1436416 = -2.9130712528480477e-164;
bool r1436417 = r1436403 <= r1436416;
double r1436418 = r1436403 * r1436403;
double r1436419 = r1436411 * r1436411;
double r1436420 = r1436418 + r1436419;
double r1436421 = sqrt(r1436420);
double r1436422 = log(r1436421);
double r1436423 = r1436408 * r1436422;
double r1436424 = r1436423 - r1436413;
double r1436425 = exp(r1436424);
double r1436426 = -4.2640896224449e-310;
bool r1436427 = r1436403 <= r1436426;
double r1436428 = log(r1436403);
double r1436429 = r1436408 * r1436428;
double r1436430 = r1436429 - r1436413;
double r1436431 = exp(r1436430);
double r1436432 = r1436427 ? r1436415 : r1436431;
double r1436433 = r1436417 ? r1436425 : r1436432;
double r1436434 = r1436405 ? r1436415 : r1436433;
return r1436434;
}



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.8407009899098441e-06 or -2.9130712528480477e-164 < x.re < -4.2640896224449e-310Initial program 36.3
Taylor expanded around 0 21.2
Taylor expanded around -inf 4.1
Simplified4.1
if -1.8407009899098441e-06 < x.re < -2.9130712528480477e-164Initial program 15.9
Taylor expanded around 0 8.3
if -4.2640896224449e-310 < x.re Initial program 34.9
Taylor expanded around 0 22.3
Taylor expanded around inf 11.9
Final simplification8.6
herbie shell --seed 2019163
(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)))))