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 -8.175110389942220277535606310142807675773 \cdot 10^{-159}:\\
\;\;\;\;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 -2.90565931126470136668757578151313908826 \cdot 10^{-295}:\\
\;\;\;\;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 + \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot \left(\sqrt[3]{y.re} \cdot \sqrt[3]{y.re}\right)\right) \cdot \sqrt[3]{y.re}\right)\\
\mathbf{elif}\;x.re \le -5.732555556840643503544738500583699128372 \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 + \log x.re \cdot y.im\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r17268 = x_re;
double r17269 = r17268 * r17268;
double r17270 = x_im;
double r17271 = r17270 * r17270;
double r17272 = r17269 + r17271;
double r17273 = sqrt(r17272);
double r17274 = log(r17273);
double r17275 = y_re;
double r17276 = r17274 * r17275;
double r17277 = atan2(r17270, r17268);
double r17278 = y_im;
double r17279 = r17277 * r17278;
double r17280 = r17276 - r17279;
double r17281 = exp(r17280);
double r17282 = r17274 * r17278;
double r17283 = r17277 * r17275;
double r17284 = r17282 + r17283;
double r17285 = sin(r17284);
double r17286 = r17281 * r17285;
return r17286;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17287 = x_re;
double r17288 = -8.17511038994222e-159;
bool r17289 = r17287 <= r17288;
double r17290 = r17287 * r17287;
double r17291 = x_im;
double r17292 = r17291 * r17291;
double r17293 = r17290 + r17292;
double r17294 = sqrt(r17293);
double r17295 = log(r17294);
double r17296 = y_re;
double r17297 = r17295 * r17296;
double r17298 = atan2(r17291, r17287);
double r17299 = y_im;
double r17300 = r17298 * r17299;
double r17301 = r17297 - r17300;
double r17302 = exp(r17301);
double r17303 = r17298 * r17296;
double r17304 = -1.0;
double r17305 = r17304 / r17287;
double r17306 = log(r17305);
double r17307 = r17299 * r17306;
double r17308 = r17303 - r17307;
double r17309 = sin(r17308);
double r17310 = r17302 * r17309;
double r17311 = -2.9056593112647014e-295;
bool r17312 = r17287 <= r17311;
double r17313 = r17295 * r17299;
double r17314 = cbrt(r17296);
double r17315 = r17314 * r17314;
double r17316 = r17298 * r17315;
double r17317 = r17316 * r17314;
double r17318 = r17313 + r17317;
double r17319 = sin(r17318);
double r17320 = r17302 * r17319;
double r17321 = -5.732555556840644e-309;
bool r17322 = r17287 <= r17321;
double r17323 = log(r17287);
double r17324 = r17323 * r17299;
double r17325 = r17303 + r17324;
double r17326 = sin(r17325);
double r17327 = r17302 * r17326;
double r17328 = r17322 ? r17310 : r17327;
double r17329 = r17312 ? r17320 : r17328;
double r17330 = r17289 ? r17310 : r17329;
return r17330;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -8.17511038994222e-159 or -2.9056593112647014e-295 < x.re < -5.732555556840644e-309Initial program 31.8
Taylor expanded around -inf 18.8
if -8.17511038994222e-159 < x.re < -2.9056593112647014e-295Initial program 30.7
rmApplied add-cube-cbrt30.8
Applied associate-*r*30.8
if -5.732555556840644e-309 < x.re Initial program 34.4
Taylor expanded around inf 24.2
Simplified24.2
Final simplification22.8
herbie shell --seed 2019350
(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)))))