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}:\\
\;\;\;\;\frac{{\left(-1 \cdot x.re\right)}^{y.re}}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \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 r13021 = x_re;
double r13022 = r13021 * r13021;
double r13023 = x_im;
double r13024 = r13023 * r13023;
double r13025 = r13022 + r13024;
double r13026 = sqrt(r13025);
double r13027 = log(r13026);
double r13028 = y_re;
double r13029 = r13027 * r13028;
double r13030 = atan2(r13023, r13021);
double r13031 = y_im;
double r13032 = r13030 * r13031;
double r13033 = r13029 - r13032;
double r13034 = exp(r13033);
double r13035 = r13027 * r13031;
double r13036 = r13030 * r13028;
double r13037 = r13035 + r13036;
double r13038 = cos(r13037);
double r13039 = r13034 * r13038;
return r13039;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r13040 = x_re;
double r13041 = -8.512054391915102e-257;
bool r13042 = r13040 <= r13041;
double r13043 = -1.0;
double r13044 = r13043 * r13040;
double r13045 = y_re;
double r13046 = pow(r13044, r13045);
double r13047 = x_im;
double r13048 = atan2(r13047, r13040);
double r13049 = y_im;
double r13050 = r13048 * r13049;
double r13051 = exp(r13050);
double r13052 = r13046 / r13051;
double r13053 = 1.0;
double r13054 = r13052 * r13053;
double r13055 = -2.4485621286449e-310;
bool r13056 = r13040 <= r13055;
double r13057 = r13040 * r13040;
double r13058 = r13047 * r13047;
double r13059 = r13057 + r13058;
double r13060 = sqrt(r13059);
double r13061 = log(r13060);
double r13062 = r13061 * r13045;
double r13063 = r13062 - r13050;
double r13064 = exp(r13063);
double r13065 = r13064 * r13053;
double r13066 = 8.333241630915609e-157;
bool r13067 = r13040 <= r13066;
double r13068 = log(r13040);
double r13069 = r13068 * r13045;
double r13070 = r13069 - r13050;
double r13071 = exp(r13070);
double r13072 = r13071 * r13053;
double r13073 = 0.049666903313089414;
bool r13074 = r13040 <= r13073;
double r13075 = r13074 ? r13065 : r13072;
double r13076 = r13067 ? r13072 : r13075;
double r13077 = r13056 ? r13065 : r13076;
double r13078 = r13042 ? r13054 : r13077;
return r13078;
}



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 exp-diff22.4
Simplified22.4
Taylor expanded around -inf 11.2
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)))))