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.279984231756221075102065128773703573889 \cdot 10^{-39}:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{elif}\;x.re \le -6.976850503579899424762869422678365888839 \cdot 10^{-201}:\\
\;\;\;\;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}\\
\mathbf{elif}\;x.re \le -1.326403545807526688712040109908183161521 \cdot 10^{-310}:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \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 r24950 = x_re;
double r24951 = r24950 * r24950;
double r24952 = x_im;
double r24953 = r24952 * r24952;
double r24954 = r24951 + r24953;
double r24955 = sqrt(r24954);
double r24956 = log(r24955);
double r24957 = y_re;
double r24958 = r24956 * r24957;
double r24959 = atan2(r24952, r24950);
double r24960 = y_im;
double r24961 = r24959 * r24960;
double r24962 = r24958 - r24961;
double r24963 = exp(r24962);
double r24964 = r24956 * r24960;
double r24965 = r24959 * r24957;
double r24966 = r24964 + r24965;
double r24967 = cos(r24966);
double r24968 = r24963 * r24967;
return r24968;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r24969 = x_re;
double r24970 = -1.279984231756221e-39;
bool r24971 = r24969 <= r24970;
double r24972 = y_re;
double r24973 = -1.0;
double r24974 = r24973 / r24969;
double r24975 = log(r24974);
double r24976 = r24972 * r24975;
double r24977 = -r24976;
double r24978 = x_im;
double r24979 = atan2(r24978, r24969);
double r24980 = y_im;
double r24981 = r24979 * r24980;
double r24982 = r24977 - r24981;
double r24983 = exp(r24982);
double r24984 = -6.9768505035799e-201;
bool r24985 = r24969 <= r24984;
double r24986 = r24969 * r24969;
double r24987 = r24978 * r24978;
double r24988 = r24986 + r24987;
double r24989 = sqrt(r24988);
double r24990 = log(r24989);
double r24991 = r24990 * r24972;
double r24992 = r24991 - r24981;
double r24993 = exp(r24992);
double r24994 = -1.32640354580753e-310;
bool r24995 = r24969 <= r24994;
double r24996 = log(r24969);
double r24997 = r24996 * r24972;
double r24998 = r24997 - r24981;
double r24999 = exp(r24998);
double r25000 = r24995 ? r24983 : r24999;
double r25001 = r24985 ? r24993 : r25000;
double r25002 = r24971 ? r24983 : r25001;
return r25002;
}



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.279984231756221e-39 or -6.9768505035799e-201 < x.re < -1.32640354580753e-310Initial program 36.6
Taylor expanded around 0 20.5
Taylor expanded around -inf 3.7
Simplified3.7
if -1.279984231756221e-39 < x.re < -6.9768505035799e-201Initial program 19.8
Taylor expanded around 0 11.3
if -1.32640354580753e-310 < x.re Initial program 34.6
Taylor expanded around 0 21.6
Taylor expanded around inf 11.6
Final simplification8.7
herbie shell --seed 2019306
(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)))))