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.616832559651558451849109678525604482482 \cdot 10^{-55}:\\
\;\;\;\;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 -5.801236634736125880840417635301472309179 \cdot 10^{-149}:\\
\;\;\;\;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 + \log \left(\sqrt[3]{\sqrt[3]{\sqrt{{x.im}^{2} + {x.re}^{2}}} \cdot \left(\sqrt[3]{\sqrt{{x.im}^{2} + {x.re}^{2}}} \cdot \sqrt[3]{\sqrt{{x.im}^{2} + {x.re}^{2}}}\right)} \cdot \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)\right) \cdot y.im\right)\\
\mathbf{elif}\;x.re \le 2.139329358485260398678701659639633596924 \cdot 10^{-311}:\\
\;\;\;\;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{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(y.im \cdot \log x.re + \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 r28206 = x_re;
double r28207 = r28206 * r28206;
double r28208 = x_im;
double r28209 = r28208 * r28208;
double r28210 = r28207 + r28209;
double r28211 = sqrt(r28210);
double r28212 = log(r28211);
double r28213 = y_re;
double r28214 = r28212 * r28213;
double r28215 = atan2(r28208, r28206);
double r28216 = y_im;
double r28217 = r28215 * r28216;
double r28218 = r28214 - r28217;
double r28219 = exp(r28218);
double r28220 = r28212 * r28216;
double r28221 = r28215 * r28213;
double r28222 = r28220 + r28221;
double r28223 = sin(r28222);
double r28224 = r28219 * r28223;
return r28224;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r28225 = x_re;
double r28226 = -5.6168325596515585e-55;
bool r28227 = r28225 <= r28226;
double r28228 = y_re;
double r28229 = r28225 * r28225;
double r28230 = x_im;
double r28231 = r28230 * r28230;
double r28232 = r28229 + r28231;
double r28233 = sqrt(r28232);
double r28234 = log(r28233);
double r28235 = r28228 * r28234;
double r28236 = atan2(r28230, r28225);
double r28237 = y_im;
double r28238 = r28236 * r28237;
double r28239 = r28235 - r28238;
double r28240 = exp(r28239);
double r28241 = r28236 * r28228;
double r28242 = -r28225;
double r28243 = log(r28242);
double r28244 = r28237 * r28243;
double r28245 = r28241 + r28244;
double r28246 = sin(r28245);
double r28247 = r28240 * r28246;
double r28248 = -5.801236634736126e-149;
bool r28249 = r28225 <= r28248;
double r28250 = 2.0;
double r28251 = pow(r28230, r28250);
double r28252 = pow(r28225, r28250);
double r28253 = r28251 + r28252;
double r28254 = sqrt(r28253);
double r28255 = cbrt(r28254);
double r28256 = r28255 * r28255;
double r28257 = r28255 * r28256;
double r28258 = cbrt(r28257);
double r28259 = cbrt(r28233);
double r28260 = r28259 * r28259;
double r28261 = r28258 * r28260;
double r28262 = log(r28261);
double r28263 = r28262 * r28237;
double r28264 = r28241 + r28263;
double r28265 = sin(r28264);
double r28266 = r28240 * r28265;
double r28267 = 2.1393293584853e-311;
bool r28268 = r28225 <= r28267;
double r28269 = log(r28225);
double r28270 = r28237 * r28269;
double r28271 = r28270 + r28241;
double r28272 = sin(r28271);
double r28273 = r28240 * r28272;
double r28274 = r28268 ? r28247 : r28273;
double r28275 = r28249 ? r28266 : r28274;
double r28276 = r28227 ? r28247 : r28275;
return r28276;
}



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.6168325596515585e-55 or -5.801236634736126e-149 < x.re < 2.1393293584853e-311Initial program 35.3
Taylor expanded around -inf 22.1
Simplified22.1
if -5.6168325596515585e-55 < x.re < -5.801236634736126e-149Initial program 16.6
rmApplied add-cube-cbrt16.6
rmApplied add-cube-cbrt16.6
Simplified16.6
Simplified16.6
if 2.1393293584853e-311 < x.re Initial program 35.2
Taylor expanded around inf 24.2
Final simplification22.7
herbie shell --seed 2019196
(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)))))