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.10818941820937710228157820567926251812 \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 r16188 = x_re;
double r16189 = r16188 * r16188;
double r16190 = x_im;
double r16191 = r16190 * r16190;
double r16192 = r16189 + r16191;
double r16193 = sqrt(r16192);
double r16194 = log(r16193);
double r16195 = y_re;
double r16196 = r16194 * r16195;
double r16197 = atan2(r16190, r16188);
double r16198 = y_im;
double r16199 = r16197 * r16198;
double r16200 = r16196 - r16199;
double r16201 = exp(r16200);
double r16202 = r16194 * r16198;
double r16203 = r16197 * r16195;
double r16204 = r16202 + r16203;
double r16205 = sin(r16204);
double r16206 = r16201 * r16205;
return r16206;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16207 = x_re;
double r16208 = -5.108189418209377e-309;
bool r16209 = r16207 <= r16208;
double r16210 = r16207 * r16207;
double r16211 = x_im;
double r16212 = r16211 * r16211;
double r16213 = r16210 + r16212;
double r16214 = sqrt(r16213);
double r16215 = log(r16214);
double r16216 = y_re;
double r16217 = r16215 * r16216;
double r16218 = atan2(r16211, r16207);
double r16219 = y_im;
double r16220 = r16218 * r16219;
double r16221 = r16217 - r16220;
double r16222 = exp(r16221);
double r16223 = r16218 * r16216;
double r16224 = -1.0;
double r16225 = r16224 / r16207;
double r16226 = log(r16225);
double r16227 = r16219 * r16226;
double r16228 = r16223 - r16227;
double r16229 = sin(r16228);
double r16230 = r16222 * r16229;
double r16231 = 1.0;
double r16232 = r16231 / r16207;
double r16233 = log(r16232);
double r16234 = r16219 * r16233;
double r16235 = r16223 - r16234;
double r16236 = sin(r16235);
double r16237 = r16222 * r16236;
double r16238 = r16209 ? r16230 : r16237;
return r16238;
}



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.108189418209377e-309Initial program 32.7
Taylor expanded around -inf 21.4
if -5.108189418209377e-309 < x.re Initial program 35.3
rmApplied add-cube-cbrt35.3
Taylor expanded around inf 24.6
Final simplification23.0
herbie shell --seed 2020002
(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)))))