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)e^{\log \left(1 \cdot \mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\log \left(1 \cdot \mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im + \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot \left(\sqrt[3]{y.re} \cdot \sqrt[3]{y.re}\right)\right) \cdot \sqrt[3]{y.re}\right)double f(double x_re, double x_im, double y_re, double y_im) {
double r16142 = x_re;
double r16143 = r16142 * r16142;
double r16144 = x_im;
double r16145 = r16144 * r16144;
double r16146 = r16143 + r16145;
double r16147 = sqrt(r16146);
double r16148 = log(r16147);
double r16149 = y_re;
double r16150 = r16148 * r16149;
double r16151 = atan2(r16144, r16142);
double r16152 = y_im;
double r16153 = r16151 * r16152;
double r16154 = r16150 - r16153;
double r16155 = exp(r16154);
double r16156 = r16148 * r16152;
double r16157 = r16151 * r16149;
double r16158 = r16156 + r16157;
double r16159 = sin(r16158);
double r16160 = r16155 * r16159;
return r16160;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16161 = 1.0;
double r16162 = x_re;
double r16163 = x_im;
double r16164 = hypot(r16162, r16163);
double r16165 = r16161 * r16164;
double r16166 = log(r16165);
double r16167 = y_re;
double r16168 = r16166 * r16167;
double r16169 = atan2(r16163, r16162);
double r16170 = y_im;
double r16171 = r16169 * r16170;
double r16172 = r16168 - r16171;
double r16173 = exp(r16172);
double r16174 = r16166 * r16170;
double r16175 = cbrt(r16167);
double r16176 = r16175 * r16175;
double r16177 = r16169 * r16176;
double r16178 = r16177 * r16175;
double r16179 = r16174 + r16178;
double r16180 = sin(r16179);
double r16181 = r16173 * r16180;
return r16181;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 33.4
rmApplied *-un-lft-identity33.4
Applied sqrt-prod33.4
Simplified33.4
Simplified19.4
rmApplied *-un-lft-identity19.4
Applied sqrt-prod19.4
Simplified19.4
Simplified3.7
rmApplied add-cube-cbrt3.9
Applied associate-*r*3.9
Final simplification3.9
herbie shell --seed 2019353 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
:precision binary64
(* (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)))))