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 - \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right) \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)\right)double f(double x_re, double x_im, double y_re, double y_im) {
double r15369 = x_re;
double r15370 = r15369 * r15369;
double r15371 = x_im;
double r15372 = r15371 * r15371;
double r15373 = r15370 + r15372;
double r15374 = sqrt(r15373);
double r15375 = log(r15374);
double r15376 = y_re;
double r15377 = r15375 * r15376;
double r15378 = atan2(r15371, r15369);
double r15379 = y_im;
double r15380 = r15378 * r15379;
double r15381 = r15377 - r15380;
double r15382 = exp(r15381);
double r15383 = r15375 * r15379;
double r15384 = r15378 * r15376;
double r15385 = r15383 + r15384;
double r15386 = sin(r15385);
double r15387 = r15382 * r15386;
return r15387;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r15388 = 1.0;
double r15389 = x_re;
double r15390 = x_im;
double r15391 = hypot(r15389, r15390);
double r15392 = r15388 * r15391;
double r15393 = log(r15392);
double r15394 = y_re;
double r15395 = r15393 * r15394;
double r15396 = atan2(r15390, r15389);
double r15397 = y_im;
double r15398 = r15396 * r15397;
double r15399 = cbrt(r15398);
double r15400 = r15399 * r15399;
double r15401 = r15400 * r15399;
double r15402 = r15395 - r15401;
double r15403 = exp(r15402);
double r15404 = log(r15391);
double r15405 = r15404 * r15397;
double r15406 = r15396 * r15394;
double r15407 = r15405 + r15406;
double r15408 = sin(r15407);
double r15409 = expm1(r15408);
double r15410 = log1p(r15409);
double r15411 = r15403 * r15410;
return r15411;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 33.6
rmApplied hypot-def19.5
rmApplied *-un-lft-identity19.5
Applied sqrt-prod19.5
Simplified19.5
Simplified3.8
rmApplied add-cube-cbrt3.8
rmApplied log1p-expm1-u3.8
Final simplification3.8
herbie shell --seed 2020020 +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)))))