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}\;y.re \le -2.2700854376194488 \cdot 10^{-17}:\\
\;\;\;\;e^{\log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(-x.re\right) - \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 r560192 = x_re;
double r560193 = r560192 * r560192;
double r560194 = x_im;
double r560195 = r560194 * r560194;
double r560196 = r560193 + r560195;
double r560197 = sqrt(r560196);
double r560198 = log(r560197);
double r560199 = y_re;
double r560200 = r560198 * r560199;
double r560201 = atan2(r560194, r560192);
double r560202 = y_im;
double r560203 = r560201 * r560202;
double r560204 = r560200 - r560203;
double r560205 = exp(r560204);
double r560206 = r560198 * r560202;
double r560207 = r560201 * r560199;
double r560208 = r560206 + r560207;
double r560209 = cos(r560208);
double r560210 = r560205 * r560209;
return r560210;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r560211 = y_re;
double r560212 = -2.2700854376194488e-17;
bool r560213 = r560211 <= r560212;
double r560214 = x_im;
double r560215 = r560214 * r560214;
double r560216 = x_re;
double r560217 = r560216 * r560216;
double r560218 = r560215 + r560217;
double r560219 = sqrt(r560218);
double r560220 = log(r560219);
double r560221 = r560220 * r560211;
double r560222 = atan2(r560214, r560216);
double r560223 = y_im;
double r560224 = r560222 * r560223;
double r560225 = r560221 - r560224;
double r560226 = exp(r560225);
double r560227 = -r560216;
double r560228 = log(r560227);
double r560229 = r560211 * r560228;
double r560230 = r560229 - r560224;
double r560231 = exp(r560230);
double r560232 = r560213 ? r560226 : r560231;
return r560232;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -2.2700854376194488e-17Initial program 36.0
Taylor expanded around 0 0.5
if -2.2700854376194488e-17 < y.re Initial program 27.7
Taylor expanded around 0 25.2
Taylor expanded around -inf 0.1
Simplified0.1
Final simplification0.3
herbie shell --seed 2019107
(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)))))