double f(double x_re, double x_im, double y_re, double y_im) {
double r499000 = x_re;
double r499001 = r499000 * r499000;
double r499002 = x_im;
double r499003 = r499002 * r499002;
double r499004 = r499001 + r499003;
double r499005 = sqrt(r499004);
double r499006 = log(r499005);
double r499007 = y_re;
double r499008 = r499006 * r499007;
double r499009 = atan2(r499002, r499000);
double r499010 = y_im;
double r499011 = r499009 * r499010;
double r499012 = r499008 - r499011;
double r499013 = exp(r499012);
double r499014 = r499006 * r499010;
double r499015 = r499009 * r499007;
double r499016 = r499014 + r499015;
double r499017 = sin(r499016);
double r499018 = r499013 * r499017;
return r499018;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r499019 = y_im;
double r499020 = x_re;
double r499021 = r499020 * r499020;
double r499022 = x_im;
double r499023 = r499022 * r499022;
double r499024 = r499021 + r499023;
double r499025 = sqrt(r499024);
double r499026 = log(r499025);
double r499027 = r499019 * r499026;
double r499028 = atan2(r499022, r499020);
double r499029 = y_re;
double r499030 = r499028 * r499029;
double r499031 = r499027 + r499030;
double r499032 = sin(r499031);
double r499033 = r499029 * r499026;
double r499034 = r499028 * r499019;
double r499035 = r499033 - r499034;
double r499036 = exp(r499035);
double r499037 = r499032 * r499036;
double r499038 = 1.2224805417455606e-28;
bool r499039 = r499037 <= r499038;
double r499040 = -r499020;
double r499041 = log(r499040);
double r499042 = r499019 * r499041;
double r499043 = r499030 + r499042;
double r499044 = sin(r499043);
double r499045 = r499041 * r499029;
double r499046 = r499045 - r499034;
double r499047 = exp(r499046);
double r499048 = r499044 * r499047;
double r499049 = r499039 ? r499037 : r499048;
return r499049;
}
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 \sin \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}\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \le 1.2224805417455606 \cdot 10^{-28}:\\
\;\;\;\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right) \cdot e^{\log \left(-x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}


Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if (* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))) < 1.2224805417455606e-28Initial program 0.2
if 1.2224805417455606e-28 < (* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))) Initial program 62.0
Taylor expanded around -inf 22.2
Simplified22.2
Taylor expanded around -inf 20.5
Simplified20.5
Final simplification10.3
herbie shell --seed 2019101
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))