\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\begin{array}{l}
\mathbf{if}\;y.im \leq -6.329466807877134 \cdot 10^{+128}:\\
\;\;\;\;\frac{x.im}{y.im}\\
\mathbf{elif}\;y.im \leq -5.723038204809748 \cdot 10^{-114}:\\
\;\;\;\;\frac{\left(x.re \cdot y.re + y.im \cdot x.im\right) \cdot \frac{1}{\sqrt{{y.re}^{2} + {y.im}^{2}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{elif}\;y.im \leq 1.5571445232288445 \cdot 10^{-162}:\\
\;\;\;\;\frac{x.re}{y.re} + \frac{y.im \cdot x.im}{{y.re}^{2}}\\
\mathbf{elif}\;y.im \leq 8.575139954827566 \cdot 10^{+101}:\\
\;\;\;\;\frac{\left(x.re \cdot y.re + y.im \cdot x.im\right) \cdot \frac{1}{\sqrt{{y.re}^{2} + {y.im}^{2}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{y.im}\\
\end{array}(FPCore (x.re x.im y.re y.im) :precision binary64 (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))
(FPCore (x.re x.im y.re y.im)
:precision binary64
(if (<= y.im -6.329466807877134e+128)
(/ x.im y.im)
(if (<= y.im -5.723038204809748e-114)
(/
(*
(+ (* x.re y.re) (* y.im x.im))
(/ 1.0 (sqrt (+ (pow y.re 2.0) (pow y.im 2.0)))))
(sqrt (+ (* y.re y.re) (* y.im y.im))))
(if (<= y.im 1.5571445232288445e-162)
(+ (/ x.re y.re) (/ (* y.im x.im) (pow y.re 2.0)))
(if (<= y.im 8.575139954827566e+101)
(/
(*
(+ (* x.re y.re) (* y.im x.im))
(/ 1.0 (sqrt (+ (pow y.re 2.0) (pow y.im 2.0)))))
(sqrt (+ (* y.re y.re) (* y.im y.im))))
(/ x.im y.im))))))double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
return ((x_46_re * y_46_re) + (x_46_im * y_46_im)) / ((y_46_re * y_46_re) + (y_46_im * y_46_im));
}
double code(double x_46_re, double x_46_im, double y_46_re, double y_46_im) {
double tmp;
if (y_46_im <= -6.329466807877134e+128) {
tmp = x_46_im / y_46_im;
} else if (y_46_im <= -5.723038204809748e-114) {
tmp = (((x_46_re * y_46_re) + (y_46_im * x_46_im)) * (1.0 / sqrt(pow(y_46_re, 2.0) + pow(y_46_im, 2.0)))) / sqrt((y_46_re * y_46_re) + (y_46_im * y_46_im));
} else if (y_46_im <= 1.5571445232288445e-162) {
tmp = (x_46_re / y_46_re) + ((y_46_im * x_46_im) / pow(y_46_re, 2.0));
} else if (y_46_im <= 8.575139954827566e+101) {
tmp = (((x_46_re * y_46_re) + (y_46_im * x_46_im)) * (1.0 / sqrt(pow(y_46_re, 2.0) + pow(y_46_im, 2.0)))) / sqrt((y_46_re * y_46_re) + (y_46_im * y_46_im));
} else {
tmp = x_46_im / y_46_im;
}
return tmp;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < -6.3294668078771342e128 or 8.575139954827566e101 < y.im Initial program 40.8
Taylor expanded around 0 15.7
if -6.3294668078771342e128 < y.im < -5.72303820480974823e-114 or 1.5571445232288445e-162 < y.im < 8.575139954827566e101Initial program 16.3
rmApplied add-sqr-sqrt_binary64_112316.3
Applied associate-/r*_binary64_104516.2
Simplified16.2
rmApplied div-inv_binary64_109816.3
if -5.72303820480974823e-114 < y.im < 1.5571445232288445e-162Initial program 25.1
Taylor expanded around inf 10.2
Simplified10.2
Final simplification14.6
herbie shell --seed 2020357
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, real part"
:precision binary64
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))