double f(double x_re, double x_im, double y_re, double y_im) {
double r353957 = x_re;
double r353958 = r353957 * r353957;
double r353959 = x_im;
double r353960 = r353959 * r353959;
double r353961 = r353958 + r353960;
double r353962 = sqrt(r353961);
double r353963 = log(r353962);
double r353964 = y_re;
double r353965 = r353963 * r353964;
double r353966 = atan2(r353959, r353957);
double r353967 = y_im;
double r353968 = r353966 * r353967;
double r353969 = r353965 - r353968;
double r353970 = exp(r353969);
double r353971 = r353963 * r353967;
double r353972 = r353966 * r353964;
double r353973 = r353971 + r353972;
double r353974 = sin(r353973);
double r353975 = r353970 * r353974;
return r353975;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r353976 = y_im;
double r353977 = x_re;
double r353978 = x_im;
double r353979 = hypot(r353977, r353978);
double r353980 = log(r353979);
double r353981 = atan2(r353978, r353977);
double r353982 = y_re;
double r353983 = r353981 * r353982;
double r353984 = fma(r353976, r353980, r353983);
double r353985 = sin(r353984);
double r353986 = r353981 * r353976;
double r353987 = r353982 * r353980;
double r353988 = r353986 - r353987;
double r353989 = exp(r353988);
double r353990 = r353985 / r353989;
return r353990;
}
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)\frac{\sin \left((y.im \cdot \left(\log \left(\sqrt{x.re^2 + x.im^2}^*\right)\right) + \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right))_*\right)}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im - y.re \cdot \log \left(\sqrt{x.re^2 + x.im^2}^*\right)}}


Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 31.0
Simplified0.2
Final simplification0.2
herbie shell --seed 2019101 +o rules:numerics
(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)))))