\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.re \le -2.9459980091776752 \cdot 10^{158}:\\
\;\;\;\;\frac{-1 \cdot x.re}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{elif}\;y.re \le -86223460658051.5:\\
\;\;\;\;\left(\frac{\frac{1}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right)} \cdot y.re\right) \cdot x.re + \left(\frac{\frac{1}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right)} \cdot y.im\right) \cdot x.im\\
\mathbf{elif}\;y.re \le 2.2413672752256256 \cdot 10^{125}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(x.re, y.re, x.im \cdot y.im\right)}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.re}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r69690 = x_re;
double r69691 = y_re;
double r69692 = r69690 * r69691;
double r69693 = x_im;
double r69694 = y_im;
double r69695 = r69693 * r69694;
double r69696 = r69692 + r69695;
double r69697 = r69691 * r69691;
double r69698 = r69694 * r69694;
double r69699 = r69697 + r69698;
double r69700 = r69696 / r69699;
return r69700;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r69701 = y_re;
double r69702 = -2.945998009177675e+158;
bool r69703 = r69701 <= r69702;
double r69704 = -1.0;
double r69705 = x_re;
double r69706 = r69704 * r69705;
double r69707 = y_im;
double r69708 = hypot(r69701, r69707);
double r69709 = 1.0;
double r69710 = r69708 * r69709;
double r69711 = r69706 / r69710;
double r69712 = -86223460658051.5;
bool r69713 = r69701 <= r69712;
double r69714 = r69709 / r69708;
double r69715 = r69714 / r69708;
double r69716 = r69715 * r69701;
double r69717 = r69716 * r69705;
double r69718 = r69715 * r69707;
double r69719 = x_im;
double r69720 = r69718 * r69719;
double r69721 = r69717 + r69720;
double r69722 = 2.2413672752256256e+125;
bool r69723 = r69701 <= r69722;
double r69724 = r69719 * r69707;
double r69725 = fma(r69705, r69701, r69724);
double r69726 = r69725 / r69708;
double r69727 = r69726 / r69710;
double r69728 = r69705 / r69710;
double r69729 = r69723 ? r69727 : r69728;
double r69730 = r69713 ? r69721 : r69729;
double r69731 = r69703 ? r69711 : r69730;
return r69731;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.re < -2.945998009177675e+158Initial program 45.8
rmApplied add-sqr-sqrt45.8
Applied *-un-lft-identity45.8
Applied times-frac45.8
Simplified45.8
Simplified29.5
rmApplied associate-*r/29.5
Simplified29.5
Taylor expanded around -inf 12.9
if -2.945998009177675e+158 < y.re < -86223460658051.5Initial program 22.3
rmApplied add-sqr-sqrt22.3
Applied *-un-lft-identity22.3
Applied times-frac22.3
Simplified22.3
Simplified17.2
rmApplied *-un-lft-identity17.2
Applied times-frac17.3
Simplified17.3
rmApplied fma-udef17.3
Applied distribute-lft-in17.3
Applied distribute-lft-in17.3
Simplified12.0
Simplified15.5
if -86223460658051.5 < y.re < 2.2413672752256256e+125Initial program 18.7
rmApplied add-sqr-sqrt18.7
Applied *-un-lft-identity18.7
Applied times-frac18.7
Simplified18.7
Simplified11.9
rmApplied associate-*r/11.8
Simplified11.7
if 2.2413672752256256e+125 < y.re Initial program 42.7
rmApplied add-sqr-sqrt42.7
Applied *-un-lft-identity42.7
Applied times-frac42.7
Simplified42.7
Simplified28.1
rmApplied associate-*r/28.1
Simplified28.1
Taylor expanded around inf 14.9
Final simplification12.8
herbie shell --seed 2020065 +o rules:numerics
(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))))