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.43693106990943942236142186325654954095 \cdot 10^{-21}:\\
\;\;\;\;\frac{{\left(\frac{-1}{x.re}\right)}^{\left(-y.re\right)}}{\sqrt{{\left(e^{y.im}\right)}^{\left(\tan^{-1}_* \frac{x.im}{x.re}\right)}} \cdot \sqrt{{\left(e^{y.im}\right)}^{\left(\tan^{-1}_* \frac{x.im}{x.re}\right)}}}\\
\mathbf{elif}\;x.re \le -3.862547000878270908215764314997251341808 \cdot 10^{-82}:\\
\;\;\;\;e^{\log \left(\sqrt[3]{{\left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right)}^{3}}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{elif}\;x.re \le -2.203136696212098368153966931412365744688 \cdot 10^{-306}:\\
\;\;\;\;\frac{{\left(\frac{-1}{x.re}\right)}^{\left(-y.re\right)}}{\sqrt{{\left(e^{y.im}\right)}^{\left(\tan^{-1}_* \frac{x.im}{x.re}\right)}} \cdot \sqrt{{\left(e^{y.im}\right)}^{\left(\tan^{-1}_* \frac{x.im}{x.re}\right)}}}\\
\mathbf{elif}\;x.re \le 1.111286203230868220787610421722651910977 \cdot 10^{-97} \lor \neg \left(x.re \le 0.1107239265288796903341506094875512644649\right):\\
\;\;\;\;e^{y.re \cdot \log x.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{\log \left(\sqrt[3]{{\left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right)}^{3}}\right) \cdot y.re - \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 r24529 = x_re;
double r24530 = r24529 * r24529;
double r24531 = x_im;
double r24532 = r24531 * r24531;
double r24533 = r24530 + r24532;
double r24534 = sqrt(r24533);
double r24535 = log(r24534);
double r24536 = y_re;
double r24537 = r24535 * r24536;
double r24538 = atan2(r24531, r24529);
double r24539 = y_im;
double r24540 = r24538 * r24539;
double r24541 = r24537 - r24540;
double r24542 = exp(r24541);
double r24543 = r24535 * r24539;
double r24544 = r24538 * r24536;
double r24545 = r24543 + r24544;
double r24546 = cos(r24545);
double r24547 = r24542 * r24546;
return r24547;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r24548 = x_re;
double r24549 = -1.4369310699094394e-21;
bool r24550 = r24548 <= r24549;
double r24551 = -1.0;
double r24552 = r24551 / r24548;
double r24553 = y_re;
double r24554 = -r24553;
double r24555 = pow(r24552, r24554);
double r24556 = y_im;
double r24557 = exp(r24556);
double r24558 = x_im;
double r24559 = atan2(r24558, r24548);
double r24560 = pow(r24557, r24559);
double r24561 = sqrt(r24560);
double r24562 = r24561 * r24561;
double r24563 = r24555 / r24562;
double r24564 = -3.862547000878271e-82;
bool r24565 = r24548 <= r24564;
double r24566 = r24548 * r24548;
double r24567 = r24558 * r24558;
double r24568 = r24566 + r24567;
double r24569 = sqrt(r24568);
double r24570 = 3.0;
double r24571 = pow(r24569, r24570);
double r24572 = cbrt(r24571);
double r24573 = log(r24572);
double r24574 = r24573 * r24553;
double r24575 = r24559 * r24556;
double r24576 = r24574 - r24575;
double r24577 = exp(r24576);
double r24578 = -2.2031366962120984e-306;
bool r24579 = r24548 <= r24578;
double r24580 = 1.1112862032308682e-97;
bool r24581 = r24548 <= r24580;
double r24582 = 0.11072392652887969;
bool r24583 = r24548 <= r24582;
double r24584 = !r24583;
bool r24585 = r24581 || r24584;
double r24586 = log(r24548);
double r24587 = r24553 * r24586;
double r24588 = r24587 - r24575;
double r24589 = exp(r24588);
double r24590 = r24585 ? r24589 : r24577;
double r24591 = r24579 ? r24563 : r24590;
double r24592 = r24565 ? r24577 : r24591;
double r24593 = r24550 ? r24563 : r24592;
return r24593;
}



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.4369310699094394e-21 or -3.862547000878271e-82 < x.re < -2.2031366962120984e-306Initial program 33.5
Taylor expanded around 0 18.5
Taylor expanded around -inf 5.5
Simplified11.0
rmApplied add-sqr-sqrt11.0
Simplified11.0
Simplified11.0
if -1.4369310699094394e-21 < x.re < -3.862547000878271e-82 or 1.1112862032308682e-97 < x.re < 0.11072392652887969Initial program 17.7
Taylor expanded around 0 11.6
rmApplied add-cbrt-cube14.7
Simplified14.7
if -2.2031366962120984e-306 < x.re < 1.1112862032308682e-97 or 0.11072392652887969 < x.re Initial program 36.8
Taylor expanded around 0 22.6
Taylor expanded around inf 11.5
Final simplification11.7
herbie shell --seed 2019174
(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)))))