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.1126196728370839 \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(\log x.re \cdot y.im + \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 r15140 = x_re;
double r15141 = r15140 * r15140;
double r15142 = x_im;
double r15143 = r15142 * r15142;
double r15144 = r15141 + r15143;
double r15145 = sqrt(r15144);
double r15146 = log(r15145);
double r15147 = y_re;
double r15148 = r15146 * r15147;
double r15149 = atan2(r15142, r15140);
double r15150 = y_im;
double r15151 = r15149 * r15150;
double r15152 = r15148 - r15151;
double r15153 = exp(r15152);
double r15154 = r15146 * r15150;
double r15155 = r15149 * r15147;
double r15156 = r15154 + r15155;
double r15157 = sin(r15156);
double r15158 = r15153 * r15157;
return r15158;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r15159 = x_re;
double r15160 = -5.112619672837084e-309;
bool r15161 = r15159 <= r15160;
double r15162 = r15159 * r15159;
double r15163 = x_im;
double r15164 = r15163 * r15163;
double r15165 = r15162 + r15164;
double r15166 = sqrt(r15165);
double r15167 = log(r15166);
double r15168 = y_re;
double r15169 = r15167 * r15168;
double r15170 = atan2(r15163, r15159);
double r15171 = y_im;
double r15172 = r15170 * r15171;
double r15173 = r15169 - r15172;
double r15174 = exp(r15173);
double r15175 = r15170 * r15168;
double r15176 = -1.0;
double r15177 = r15176 / r15159;
double r15178 = log(r15177);
double r15179 = r15171 * r15178;
double r15180 = r15175 - r15179;
double r15181 = sin(r15180);
double r15182 = r15174 * r15181;
double r15183 = log(r15159);
double r15184 = r15183 * r15171;
double r15185 = r15184 + r15175;
double r15186 = sin(r15185);
double r15187 = r15174 * r15186;
double r15188 = r15161 ? r15182 : r15187;
return r15188;
}



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.112619672837084e-309Initial program 31.4
Taylor expanded around -inf 21.4
if -5.112619672837084e-309 < x.re Initial program 34.6
Taylor expanded around inf 24.2
Final simplification22.8
herbie shell --seed 2020035
(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)))))