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 -8.512054391915101604480402838143546852923 \cdot 10^{-257}:\\
\;\;\;\;\left({\left(-1 \cdot x.re\right)}^{y.re} \cdot e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right) \cdot 1\\
\mathbf{elif}\;x.re \le -2.448562128644886468589051132244914536457 \cdot 10^{-310}:\\
\;\;\;\;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 8.333241630915608797286868021117327942766 \cdot 10^{-157}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le 0.0496669033130894138627908773742092307657:\\
\;\;\;\;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}:\\
\;\;\;\;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 r12932 = x_re;
double r12933 = r12932 * r12932;
double r12934 = x_im;
double r12935 = r12934 * r12934;
double r12936 = r12933 + r12935;
double r12937 = sqrt(r12936);
double r12938 = log(r12937);
double r12939 = y_re;
double r12940 = r12938 * r12939;
double r12941 = atan2(r12934, r12932);
double r12942 = y_im;
double r12943 = r12941 * r12942;
double r12944 = r12940 - r12943;
double r12945 = exp(r12944);
double r12946 = r12938 * r12942;
double r12947 = r12941 * r12939;
double r12948 = r12946 + r12947;
double r12949 = cos(r12948);
double r12950 = r12945 * r12949;
return r12950;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r12951 = x_re;
double r12952 = -8.512054391915102e-257;
bool r12953 = r12951 <= r12952;
double r12954 = -1.0;
double r12955 = r12954 * r12951;
double r12956 = y_re;
double r12957 = pow(r12955, r12956);
double r12958 = x_im;
double r12959 = atan2(r12958, r12951);
double r12960 = y_im;
double r12961 = r12959 * r12960;
double r12962 = -r12961;
double r12963 = exp(r12962);
double r12964 = r12957 * r12963;
double r12965 = 1.0;
double r12966 = r12964 * r12965;
double r12967 = -2.4485621286449e-310;
bool r12968 = r12951 <= r12967;
double r12969 = r12951 * r12951;
double r12970 = r12958 * r12958;
double r12971 = r12969 + r12970;
double r12972 = sqrt(r12971);
double r12973 = log(r12972);
double r12974 = r12973 * r12956;
double r12975 = r12974 - r12961;
double r12976 = exp(r12975);
double r12977 = r12976 * r12965;
double r12978 = 8.333241630915609e-157;
bool r12979 = r12951 <= r12978;
double r12980 = log(r12951);
double r12981 = r12980 * r12956;
double r12982 = r12981 - r12961;
double r12983 = exp(r12982);
double r12984 = r12983 * r12965;
double r12985 = 0.049666903313089414;
bool r12986 = r12951 <= r12985;
double r12987 = r12986 ? r12977 : r12984;
double r12988 = r12979 ? r12984 : r12987;
double r12989 = r12968 ? r12977 : r12988;
double r12990 = r12953 ? r12966 : r12989;
return r12990;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -8.512054391915102e-257Initial program 31.9
Taylor expanded around 0 17.6
rmApplied sub-neg17.6
Applied exp-sum22.3
Simplified22.3
Taylor expanded around -inf 11.1
if -8.512054391915102e-257 < x.re < -2.4485621286449e-310 or 8.333241630915609e-157 < x.re < 0.049666903313089414Initial program 21.0
Taylor expanded around 0 12.8
if -2.4485621286449e-310 < x.re < 8.333241630915609e-157 or 0.049666903313089414 < x.re Initial program 40.3
Taylor expanded around 0 25.1
Taylor expanded around inf 10.8
Final simplification11.3
herbie shell --seed 2019353
(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)))))