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 r565837 = x_re;
double r565838 = r565837 * r565837;
double r565839 = x_im;
double r565840 = r565839 * r565839;
double r565841 = r565838 + r565840;
double r565842 = sqrt(r565841);
double r565843 = log(r565842);
double r565844 = y_re;
double r565845 = r565843 * r565844;
double r565846 = atan2(r565839, r565837);
double r565847 = y_im;
double r565848 = r565846 * r565847;
double r565849 = r565845 - r565848;
double r565850 = exp(r565849);
double r565851 = r565843 * r565847;
double r565852 = r565846 * r565844;
double r565853 = r565851 + r565852;
double r565854 = cos(r565853);
double r565855 = r565850 * r565854;
return r565855;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r565856 = y_re;
double r565857 = -2.2700854376194488e-17;
bool r565858 = r565856 <= r565857;
double r565859 = x_im;
double r565860 = r565859 * r565859;
double r565861 = x_re;
double r565862 = r565861 * r565861;
double r565863 = r565860 + r565862;
double r565864 = sqrt(r565863);
double r565865 = log(r565864);
double r565866 = r565865 * r565856;
double r565867 = atan2(r565859, r565861);
double r565868 = y_im;
double r565869 = r565867 * r565868;
double r565870 = r565866 - r565869;
double r565871 = exp(r565870);
double r565872 = -r565861;
double r565873 = log(r565872);
double r565874 = r565856 * r565873;
double r565875 = r565874 - r565869;
double r565876 = exp(r565875);
double r565877 = r565858 ? r565871 : r565876;
return r565877;
}



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)))))