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}\;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) \le 0.0:\\
\;\;\;\;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)\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{{\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\left(\sqrt[3]{\cos \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im\right)} \cdot \sqrt[3]{\cos \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im\right)}\right) \cdot \sqrt[3]{\cos \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im\right)}\right)\right)\right)}^{3}} \cdot \cos \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) - \sin \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im\right) \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right) \cdot \frac{{\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re}}{e^{\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 r25158 = x_re;
double r25159 = r25158 * r25158;
double r25160 = x_im;
double r25161 = r25160 * r25160;
double r25162 = r25159 + r25161;
double r25163 = sqrt(r25162);
double r25164 = log(r25163);
double r25165 = y_re;
double r25166 = r25164 * r25165;
double r25167 = atan2(r25160, r25158);
double r25168 = y_im;
double r25169 = r25167 * r25168;
double r25170 = r25166 - r25169;
double r25171 = exp(r25170);
double r25172 = r25164 * r25168;
double r25173 = r25167 * r25165;
double r25174 = r25172 + r25173;
double r25175 = cos(r25174);
double r25176 = r25171 * r25175;
return r25176;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25177 = x_re;
double r25178 = r25177 * r25177;
double r25179 = x_im;
double r25180 = r25179 * r25179;
double r25181 = r25178 + r25180;
double r25182 = sqrt(r25181);
double r25183 = log(r25182);
double r25184 = y_re;
double r25185 = r25183 * r25184;
double r25186 = atan2(r25179, r25177);
double r25187 = y_im;
double r25188 = r25186 * r25187;
double r25189 = r25185 - r25188;
double r25190 = exp(r25189);
double r25191 = r25183 * r25187;
double r25192 = r25186 * r25184;
double r25193 = r25191 + r25192;
double r25194 = cos(r25193);
double r25195 = r25190 * r25194;
double r25196 = 0.0;
bool r25197 = r25195 <= r25196;
double r25198 = hypot(r25177, r25179);
double r25199 = log(r25198);
double r25200 = r25199 * r25187;
double r25201 = cos(r25200);
double r25202 = cbrt(r25201);
double r25203 = r25202 * r25202;
double r25204 = r25203 * r25202;
double r25205 = expm1(r25204);
double r25206 = log1p(r25205);
double r25207 = 3.0;
double r25208 = pow(r25206, r25207);
double r25209 = cbrt(r25208);
double r25210 = cos(r25192);
double r25211 = r25209 * r25210;
double r25212 = sin(r25200);
double r25213 = sin(r25192);
double r25214 = r25212 * r25213;
double r25215 = r25211 - r25214;
double r25216 = pow(r25198, r25184);
double r25217 = exp(r25188);
double r25218 = r25216 / r25217;
double r25219 = r25215 * r25218;
double r25220 = r25197 ? r25195 : r25219;
return r25220;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (* (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)))) < 0.0Initial program 4.9
if 0.0 < (* (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)))) Initial program 39.0
Simplified7.8
rmApplied fma-udef7.8
Applied cos-sum7.8
rmApplied add-cbrt-cube7.8
Simplified7.8
rmApplied log1p-expm1-u7.8
rmApplied add-cube-cbrt7.8
Final simplification6.1
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
:precision binary64
(* (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)))))