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.812740612858321729945596924807766381475 \cdot 10^{-309}:\\
\;\;\;\;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(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re - y.im \cdot \log \left(\frac{-1}{x.re}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;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(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re - y.im \cdot \log \left(\frac{1}{x.re}\right)\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r25264 = x_re;
double r25265 = r25264 * r25264;
double r25266 = x_im;
double r25267 = r25266 * r25266;
double r25268 = r25265 + r25267;
double r25269 = sqrt(r25268);
double r25270 = log(r25269);
double r25271 = y_re;
double r25272 = r25270 * r25271;
double r25273 = atan2(r25266, r25264);
double r25274 = y_im;
double r25275 = r25273 * r25274;
double r25276 = r25272 - r25275;
double r25277 = exp(r25276);
double r25278 = r25270 * r25274;
double r25279 = r25273 * r25271;
double r25280 = r25278 + r25279;
double r25281 = sin(r25280);
double r25282 = r25277 * r25281;
return r25282;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25283 = x_re;
double r25284 = -5.81274061285832e-309;
bool r25285 = r25283 <= r25284;
double r25286 = r25283 * r25283;
double r25287 = x_im;
double r25288 = r25287 * r25287;
double r25289 = r25286 + r25288;
double r25290 = sqrt(r25289);
double r25291 = log(r25290);
double r25292 = y_re;
double r25293 = r25291 * r25292;
double r25294 = atan2(r25287, r25283);
double r25295 = y_im;
double r25296 = r25294 * r25295;
double r25297 = r25293 - r25296;
double r25298 = exp(r25297);
double r25299 = r25294 * r25292;
double r25300 = -1.0;
double r25301 = r25300 / r25283;
double r25302 = log(r25301);
double r25303 = r25295 * r25302;
double r25304 = r25299 - r25303;
double r25305 = sin(r25304);
double r25306 = r25298 * r25305;
double r25307 = 1.0;
double r25308 = r25307 / r25283;
double r25309 = log(r25308);
double r25310 = r25295 * r25309;
double r25311 = r25299 - r25310;
double r25312 = sin(r25311);
double r25313 = r25298 * r25312;
double r25314 = r25285 ? r25306 : r25313;
return r25314;
}



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.81274061285832e-309Initial program 31.1
Taylor expanded around -inf 20.7
if -5.81274061285832e-309 < x.re Initial program 34.3
Taylor expanded around inf 24.1
Final simplification22.4
herbie shell --seed 2019294
(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)))))