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.6474711713701992 \cdot 10^{-78}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 8950.863112971656:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r604046 = x_re;
double r604047 = r604046 * r604046;
double r604048 = x_im;
double r604049 = r604048 * r604048;
double r604050 = r604047 + r604049;
double r604051 = sqrt(r604050);
double r604052 = log(r604051);
double r604053 = y_re;
double r604054 = r604052 * r604053;
double r604055 = atan2(r604048, r604046);
double r604056 = y_im;
double r604057 = r604055 * r604056;
double r604058 = r604054 - r604057;
double r604059 = exp(r604058);
double r604060 = r604052 * r604056;
double r604061 = r604055 * r604053;
double r604062 = r604060 + r604061;
double r604063 = cos(r604062);
double r604064 = r604059 * r604063;
return r604064;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r604065 = x_re;
double r604066 = -1.6474711713701992e-78;
bool r604067 = r604065 <= r604066;
double r604068 = -r604065;
double r604069 = log(r604068);
double r604070 = y_re;
double r604071 = r604069 * r604070;
double r604072 = y_im;
double r604073 = x_im;
double r604074 = atan2(r604073, r604065);
double r604075 = r604072 * r604074;
double r604076 = r604071 - r604075;
double r604077 = exp(r604076);
double r604078 = 8950.863112971656;
bool r604079 = r604065 <= r604078;
double r604080 = r604065 * r604065;
double r604081 = r604073 * r604073;
double r604082 = r604080 + r604081;
double r604083 = sqrt(r604082);
double r604084 = log(r604083);
double r604085 = r604070 * r604084;
double r604086 = r604085 - r604075;
double r604087 = exp(r604086);
double r604088 = log(r604065);
double r604089 = r604088 * r604070;
double r604090 = r604089 - r604075;
double r604091 = exp(r604090);
double r604092 = r604079 ? r604087 : r604091;
double r604093 = r604067 ? r604077 : r604092;
return r604093;
}



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.6474711713701992e-78Initial program 34.3
Taylor expanded around 0 19.0
Taylor expanded around -inf 3.0
Simplified3.0
if -1.6474711713701992e-78 < x.re < 8950.863112971656Initial program 25.4
Taylor expanded around 0 15.1
if 8950.863112971656 < x.re Initial program 44.2
Taylor expanded around 0 27.8
Taylor expanded around inf 10.8
Final simplification10.2
herbie shell --seed 2019153
(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)))))