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.70372452559463588 \cdot 10^{-23}:\\
\;\;\;\;\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{{\left(\frac{-1}{x.re}\right)}^{y.re}} \cdot 1\\
\mathbf{elif}\;x.re \le -3.01563396311001078 \cdot 10^{-182}:\\
\;\;\;\;\frac{\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) \cdot {\left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right)}^{y.re}}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}\\
\mathbf{elif}\;x.re \le 1.457786286792 \cdot 10^{-311}:\\
\;\;\;\;\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{{\left(\frac{-1}{x.re}\right)}^{y.re}} \cdot 1\\
\mathbf{elif}\;x.re \le 3.3637837218998096 \cdot 10^{-91}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le 1.2712943529250103 \cdot 10^{-21}:\\
\;\;\;\;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 r14566 = x_re;
double r14567 = r14566 * r14566;
double r14568 = x_im;
double r14569 = r14568 * r14568;
double r14570 = r14567 + r14569;
double r14571 = sqrt(r14570);
double r14572 = log(r14571);
double r14573 = y_re;
double r14574 = r14572 * r14573;
double r14575 = atan2(r14568, r14566);
double r14576 = y_im;
double r14577 = r14575 * r14576;
double r14578 = r14574 - r14577;
double r14579 = exp(r14578);
double r14580 = r14572 * r14576;
double r14581 = r14575 * r14573;
double r14582 = r14580 + r14581;
double r14583 = cos(r14582);
double r14584 = r14579 * r14583;
return r14584;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14585 = x_re;
double r14586 = -1.703724525594636e-23;
bool r14587 = r14585 <= r14586;
double r14588 = x_im;
double r14589 = atan2(r14588, r14585);
double r14590 = y_im;
double r14591 = r14589 * r14590;
double r14592 = -r14591;
double r14593 = exp(r14592);
double r14594 = -1.0;
double r14595 = r14594 / r14585;
double r14596 = y_re;
double r14597 = pow(r14595, r14596);
double r14598 = r14593 / r14597;
double r14599 = 1.0;
double r14600 = r14598 * r14599;
double r14601 = -3.015633963110011e-182;
bool r14602 = r14585 <= r14601;
double r14603 = r14585 * r14585;
double r14604 = r14588 * r14588;
double r14605 = r14603 + r14604;
double r14606 = sqrt(r14605);
double r14607 = log(r14606);
double r14608 = r14607 * r14590;
double r14609 = r14589 * r14596;
double r14610 = r14608 + r14609;
double r14611 = cos(r14610);
double r14612 = pow(r14606, r14596);
double r14613 = r14611 * r14612;
double r14614 = exp(r14591);
double r14615 = r14613 / r14614;
double r14616 = 1.457786286792e-311;
bool r14617 = r14585 <= r14616;
double r14618 = 3.3637837218998096e-91;
bool r14619 = r14585 <= r14618;
double r14620 = log(r14585);
double r14621 = r14620 * r14596;
double r14622 = r14621 - r14591;
double r14623 = exp(r14622);
double r14624 = r14623 * r14599;
double r14625 = 1.2712943529250103e-21;
bool r14626 = r14585 <= r14625;
double r14627 = exp(r14606);
double r14628 = log(r14627);
double r14629 = log(r14628);
double r14630 = r14629 * r14596;
double r14631 = r14630 - r14591;
double r14632 = exp(r14631);
double r14633 = r14632 * r14599;
double r14634 = r14626 ? r14633 : r14624;
double r14635 = r14619 ? r14624 : r14634;
double r14636 = r14617 ? r14600 : r14635;
double r14637 = r14602 ? r14615 : r14636;
double r14638 = r14587 ? r14600 : r14637;
return r14638;
}



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.703724525594636e-23 or -3.015633963110011e-182 < x.re < 1.457786286792e-311Initial program 37.0
Taylor expanded around 0 20.7
Taylor expanded around -inf 3.7
Simplified9.8
if -1.703724525594636e-23 < x.re < -3.015633963110011e-182Initial program 17.5
Simplified21.9
if 1.457786286792e-311 < x.re < 3.3637837218998096e-91 or 1.2712943529250103e-21 < x.re Initial program 36.2
Taylor expanded around 0 22.9
Taylor expanded around inf 11.4
if 3.3637837218998096e-91 < x.re < 1.2712943529250103e-21Initial program 20.9
Taylor expanded around 0 14.3
rmApplied add-log-exp33.5
Final simplification13.5
herbie shell --seed 2020049
(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)))))