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 -4.399901143579185647092718121671803160377 \cdot 10^{-310}:\\
\;\;\;\;\sin \left(y.im \cdot \log \left(-x.re\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot \left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}\right)\right) \cdot \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\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(\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 r1422150 = x_re;
double r1422151 = r1422150 * r1422150;
double r1422152 = x_im;
double r1422153 = r1422152 * r1422152;
double r1422154 = r1422151 + r1422153;
double r1422155 = sqrt(r1422154);
double r1422156 = log(r1422155);
double r1422157 = y_re;
double r1422158 = r1422156 * r1422157;
double r1422159 = atan2(r1422152, r1422150);
double r1422160 = y_im;
double r1422161 = r1422159 * r1422160;
double r1422162 = r1422158 - r1422161;
double r1422163 = exp(r1422162);
double r1422164 = r1422156 * r1422160;
double r1422165 = r1422159 * r1422157;
double r1422166 = r1422164 + r1422165;
double r1422167 = sin(r1422166);
double r1422168 = r1422163 * r1422167;
return r1422168;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1422169 = x_re;
double r1422170 = -4.3999011435792e-310;
bool r1422171 = r1422169 <= r1422170;
double r1422172 = y_im;
double r1422173 = -r1422169;
double r1422174 = log(r1422173);
double r1422175 = r1422172 * r1422174;
double r1422176 = x_im;
double r1422177 = atan2(r1422176, r1422169);
double r1422178 = y_re;
double r1422179 = r1422177 * r1422178;
double r1422180 = r1422175 + r1422179;
double r1422181 = sin(r1422180);
double r1422182 = r1422169 * r1422169;
double r1422183 = r1422176 * r1422176;
double r1422184 = r1422182 + r1422183;
double r1422185 = sqrt(r1422184);
double r1422186 = log(r1422185);
double r1422187 = r1422178 * r1422186;
double r1422188 = r1422177 * r1422172;
double r1422189 = cbrt(r1422188);
double r1422190 = cbrt(r1422189);
double r1422191 = r1422190 * r1422190;
double r1422192 = r1422190 * r1422191;
double r1422193 = r1422189 * r1422189;
double r1422194 = r1422192 * r1422193;
double r1422195 = r1422187 - r1422194;
double r1422196 = exp(r1422195);
double r1422197 = r1422181 * r1422196;
double r1422198 = r1422187 - r1422188;
double r1422199 = exp(r1422198);
double r1422200 = log(r1422169);
double r1422201 = r1422200 * r1422172;
double r1422202 = r1422179 + r1422201;
double r1422203 = sin(r1422202);
double r1422204 = r1422199 * r1422203;
double r1422205 = r1422171 ? r1422197 : r1422204;
return r1422205;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.3999011435792e-310Initial program 31.5
rmApplied add-cube-cbrt31.5
rmApplied add-cube-cbrt31.5
Taylor expanded around -inf 20.2
Simplified20.2
if -4.3999011435792e-310 < x.re Initial program 33.9
Taylor expanded around inf 23.7
Simplified23.7
Final simplification22.0
herbie shell --seed 2019172
(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)))))