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.99999332893273962:\\
\;\;\;\;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}:\\
\;\;\;\;\frac{{\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re} \cdot \left(\left(\sqrt[3]{\cos \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)} \cdot \sqrt[3]{\cos \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}\right) \cdot \sqrt[3]{\cos \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}\right)}{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 r19270 = x_re;
double r19271 = r19270 * r19270;
double r19272 = x_im;
double r19273 = r19272 * r19272;
double r19274 = r19271 + r19273;
double r19275 = sqrt(r19274);
double r19276 = log(r19275);
double r19277 = y_re;
double r19278 = r19276 * r19277;
double r19279 = atan2(r19272, r19270);
double r19280 = y_im;
double r19281 = r19279 * r19280;
double r19282 = r19278 - r19281;
double r19283 = exp(r19282);
double r19284 = r19276 * r19280;
double r19285 = r19279 * r19277;
double r19286 = r19284 + r19285;
double r19287 = cos(r19286);
double r19288 = r19283 * r19287;
return r19288;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r19289 = x_re;
double r19290 = r19289 * r19289;
double r19291 = x_im;
double r19292 = r19291 * r19291;
double r19293 = r19290 + r19292;
double r19294 = sqrt(r19293);
double r19295 = log(r19294);
double r19296 = y_re;
double r19297 = r19295 * r19296;
double r19298 = atan2(r19291, r19289);
double r19299 = y_im;
double r19300 = r19298 * r19299;
double r19301 = r19297 - r19300;
double r19302 = exp(r19301);
double r19303 = r19295 * r19299;
double r19304 = r19298 * r19296;
double r19305 = r19303 + r19304;
double r19306 = cos(r19305);
double r19307 = r19302 * r19306;
double r19308 = 0.9999933289327396;
bool r19309 = r19307 <= r19308;
double r19310 = hypot(r19289, r19291);
double r19311 = pow(r19310, r19296);
double r19312 = log(r19310);
double r19313 = fma(r19312, r19299, r19304);
double r19314 = cos(r19313);
double r19315 = cbrt(r19314);
double r19316 = r19315 * r19315;
double r19317 = r19316 * r19315;
double r19318 = r19311 * r19317;
double r19319 = exp(r19300);
double r19320 = r19318 / r19319;
double r19321 = r19309 ? r19307 : r19320;
return r19321;
}



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))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))) < 0.9999933289327396Initial program 4.3
if 0.9999933289327396 < (* (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 46.3
Simplified6.6
rmApplied add-cube-cbrt6.6
Final simplification5.9
herbie shell --seed 2020043 +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)))))