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 -4.323006072973230839347444461217504274066 \cdot 10^{-310}:\\
\;\;\;\;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(-1 \cdot x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{elif}\;x.re \le 1.000277774126816172777156713890057176382 \cdot 10^{-209}:\\
\;\;\;\;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{elif}\;x.re \le 1.255106323806992142969769505719842913614 \cdot 10^{-94}:\\
\;\;\;\;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(\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) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\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 r17264 = x_re;
double r17265 = r17264 * r17264;
double r17266 = x_im;
double r17267 = r17266 * r17266;
double r17268 = r17265 + r17267;
double r17269 = sqrt(r17268);
double r17270 = log(r17269);
double r17271 = y_re;
double r17272 = r17270 * r17271;
double r17273 = atan2(r17266, r17264);
double r17274 = y_im;
double r17275 = r17273 * r17274;
double r17276 = r17272 - r17275;
double r17277 = exp(r17276);
double r17278 = r17270 * r17274;
double r17279 = r17273 * r17271;
double r17280 = r17278 + r17279;
double r17281 = sin(r17280);
double r17282 = r17277 * r17281;
return r17282;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17283 = x_re;
double r17284 = -4.32300607297323e-310;
bool r17285 = r17283 <= r17284;
double r17286 = r17283 * r17283;
double r17287 = x_im;
double r17288 = r17287 * r17287;
double r17289 = r17286 + r17288;
double r17290 = sqrt(r17289);
double r17291 = log(r17290);
double r17292 = y_re;
double r17293 = r17291 * r17292;
double r17294 = atan2(r17287, r17283);
double r17295 = y_im;
double r17296 = r17294 * r17295;
double r17297 = r17293 - r17296;
double r17298 = exp(r17297);
double r17299 = -1.0;
double r17300 = r17299 * r17283;
double r17301 = log(r17300);
double r17302 = r17301 * r17295;
double r17303 = r17294 * r17292;
double r17304 = r17302 + r17303;
double r17305 = sin(r17304);
double r17306 = r17298 * r17305;
double r17307 = 1.0002777741268162e-209;
bool r17308 = r17283 <= r17307;
double r17309 = 1.0;
double r17310 = r17309 / r17283;
double r17311 = log(r17310);
double r17312 = r17295 * r17311;
double r17313 = r17303 - r17312;
double r17314 = sin(r17313);
double r17315 = r17298 * r17314;
double r17316 = 1.2551063238069921e-94;
bool r17317 = r17283 <= r17316;
double r17318 = cbrt(r17290);
double r17319 = r17318 * r17318;
double r17320 = r17319 * r17318;
double r17321 = log(r17320);
double r17322 = r17321 * r17295;
double r17323 = r17322 + r17303;
double r17324 = sin(r17323);
double r17325 = r17298 * r17324;
double r17326 = r17317 ? r17325 : r17315;
double r17327 = r17308 ? r17315 : r17326;
double r17328 = r17285 ? r17306 : r17327;
return r17328;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.32300607297323e-310Initial program 30.9
Taylor expanded around -inf 20.0
if -4.32300607297323e-310 < x.re < 1.0002777741268162e-209 or 1.2551063238069921e-94 < x.re Initial program 37.4
Taylor expanded around inf 26.2
if 1.0002777741268162e-209 < x.re < 1.2551063238069921e-94Initial program 23.2
rmApplied add-cube-cbrt23.2
Final simplification22.9
herbie shell --seed 2019347
(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)))))