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)\begin{array}{l}
\mathbf{if}\;x.re \le -5.907306680385344179981604616356048283101 \cdot 10^{-241}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right)\\
\mathbf{elif}\;x.re \le 1.808989908199788750558131282319198960687 \cdot 10^{-128}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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 \left(\sqrt[3]{\left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}\right) \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}} \cdot \left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}\right)\right)} \cdot \sin \left(y.im \cdot \log \left(\left(\sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}} \cdot \sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right) \cdot \sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\log x.re \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r27304 = x_re;
double r27305 = r27304 * r27304;
double r27306 = x_im;
double r27307 = r27306 * r27306;
double r27308 = r27305 + r27307;
double r27309 = sqrt(r27308);
double r27310 = log(r27309);
double r27311 = y_re;
double r27312 = r27310 * r27311;
double r27313 = atan2(r27306, r27304);
double r27314 = y_im;
double r27315 = r27313 * r27314;
double r27316 = r27312 - r27315;
double r27317 = exp(r27316);
double r27318 = r27310 * r27314;
double r27319 = r27313 * r27311;
double r27320 = r27318 + r27319;
double r27321 = sin(r27320);
double r27322 = r27317 * r27321;
return r27322;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r27323 = x_re;
double r27324 = -5.907306680385344e-241;
bool r27325 = r27323 <= r27324;
double r27326 = y_re;
double r27327 = r27323 * r27323;
double r27328 = x_im;
double r27329 = r27328 * r27328;
double r27330 = r27327 + r27329;
double r27331 = sqrt(r27330);
double r27332 = log(r27331);
double r27333 = r27326 * r27332;
double r27334 = atan2(r27328, r27323);
double r27335 = y_im;
double r27336 = r27334 * r27335;
double r27337 = r27333 - r27336;
double r27338 = exp(r27337);
double r27339 = r27334 * r27326;
double r27340 = -r27323;
double r27341 = log(r27340);
double r27342 = r27335 * r27341;
double r27343 = r27339 + r27342;
double r27344 = sin(r27343);
double r27345 = r27338 * r27344;
double r27346 = 1.8089899081997888e-128;
bool r27347 = r27323 <= r27346;
double r27348 = cbrt(r27336);
double r27349 = r27348 * r27348;
double r27350 = cbrt(r27348);
double r27351 = r27350 * r27350;
double r27352 = r27351 * r27350;
double r27353 = cbrt(r27352);
double r27354 = r27353 * r27351;
double r27355 = r27349 * r27354;
double r27356 = r27333 - r27355;
double r27357 = exp(r27356);
double r27358 = cbrt(r27331);
double r27359 = r27358 * r27358;
double r27360 = r27359 * r27358;
double r27361 = log(r27360);
double r27362 = r27335 * r27361;
double r27363 = r27362 + r27339;
double r27364 = sin(r27363);
double r27365 = r27357 * r27364;
double r27366 = log(r27323);
double r27367 = r27366 * r27335;
double r27368 = r27367 + r27339;
double r27369 = sin(r27368);
double r27370 = r27338 * r27369;
double r27371 = r27347 ? r27365 : r27370;
double r27372 = r27325 ? r27345 : r27371;
return r27372;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -5.907306680385344e-241Initial program 31.4
Taylor expanded around -inf 20.2
Simplified20.2
if -5.907306680385344e-241 < x.re < 1.8089899081997888e-128Initial program 30.5
rmApplied add-cube-cbrt30.5
rmApplied add-cube-cbrt30.5
Simplified30.5
Simplified30.5
rmApplied add-cube-cbrt30.5
rmApplied add-cube-cbrt30.5
if 1.8089899081997888e-128 < x.re Initial program 36.7
Taylor expanded around inf 25.5
Simplified25.5
Final simplification24.2
herbie shell --seed 2019179
(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)))))