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)\frac{\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)\right)\right)}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im - y.re \cdot \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right)}}double f(double x_re, double x_im, double y_re, double y_im) {
double r1179136 = x_re;
double r1179137 = r1179136 * r1179136;
double r1179138 = x_im;
double r1179139 = r1179138 * r1179138;
double r1179140 = r1179137 + r1179139;
double r1179141 = sqrt(r1179140);
double r1179142 = log(r1179141);
double r1179143 = y_re;
double r1179144 = r1179142 * r1179143;
double r1179145 = atan2(r1179138, r1179136);
double r1179146 = y_im;
double r1179147 = r1179145 * r1179146;
double r1179148 = r1179144 - r1179147;
double r1179149 = exp(r1179148);
double r1179150 = r1179142 * r1179146;
double r1179151 = r1179145 * r1179143;
double r1179152 = r1179150 + r1179151;
double r1179153 = sin(r1179152);
double r1179154 = r1179149 * r1179153;
return r1179154;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1179155 = y_im;
double r1179156 = x_re;
double r1179157 = x_im;
double r1179158 = hypot(r1179156, r1179157);
double r1179159 = log(r1179158);
double r1179160 = atan2(r1179157, r1179156);
double r1179161 = y_re;
double r1179162 = r1179160 * r1179161;
double r1179163 = fma(r1179155, r1179159, r1179162);
double r1179164 = sin(r1179163);
double r1179165 = log1p(r1179164);
double r1179166 = expm1(r1179165);
double r1179167 = r1179160 * r1179155;
double r1179168 = r1179161 * r1179159;
double r1179169 = r1179167 - r1179168;
double r1179170 = exp(r1179169);
double r1179171 = r1179166 / r1179170;
return r1179171;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 32.9
Simplified3.5
rmApplied expm1-log1p-u3.5
Final simplification3.5
herbie shell --seed 2019168 +o rules:numerics
(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)))))