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.479903208932528811085522200900222339976 \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 x.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r24195 = x_re;
double r24196 = r24195 * r24195;
double r24197 = x_im;
double r24198 = r24197 * r24197;
double r24199 = r24196 + r24198;
double r24200 = sqrt(r24199);
double r24201 = log(r24200);
double r24202 = y_re;
double r24203 = r24201 * r24202;
double r24204 = atan2(r24197, r24195);
double r24205 = y_im;
double r24206 = r24204 * r24205;
double r24207 = r24203 - r24206;
double r24208 = exp(r24207);
double r24209 = r24201 * r24205;
double r24210 = r24204 * r24202;
double r24211 = r24209 + r24210;
double r24212 = sin(r24211);
double r24213 = r24208 * r24212;
return r24213;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r24214 = x_re;
double r24215 = -5.47990320893253e-309;
bool r24216 = r24214 <= r24215;
double r24217 = r24214 * r24214;
double r24218 = x_im;
double r24219 = r24218 * r24218;
double r24220 = r24217 + r24219;
double r24221 = sqrt(r24220);
double r24222 = log(r24221);
double r24223 = y_re;
double r24224 = r24222 * r24223;
double r24225 = atan2(r24218, r24214);
double r24226 = y_im;
double r24227 = r24225 * r24226;
double r24228 = r24224 - r24227;
double r24229 = exp(r24228);
double r24230 = r24225 * r24223;
double r24231 = -1.0;
double r24232 = r24231 / r24214;
double r24233 = log(r24232);
double r24234 = r24226 * r24233;
double r24235 = r24230 - r24234;
double r24236 = sin(r24235);
double r24237 = r24229 * r24236;
double r24238 = log(r24214);
double r24239 = r24226 * r24238;
double r24240 = r24230 + r24239;
double r24241 = sin(r24240);
double r24242 = r24229 * r24241;
double r24243 = r24216 ? r24237 : r24242;
return r24243;
}



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.47990320893253e-309Initial program 32.0
Taylor expanded around -inf 19.7
if -5.47990320893253e-309 < x.re Initial program 35.3
Taylor expanded around inf 24.2
Simplified24.2
Final simplification22.0
herbie shell --seed 2019323
(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)))))