0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le 1.07408121477840674 \cdot 10^{-17} \lor \neg \left(re \le 1.7538691601778439 \cdot 10^{51} \lor \neg \left(re \le 1.0065728139945699 \cdot 10^{120}\right)\right):\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\mathsf{hypot}\left(re, im\right) - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2} + 0}{re + \mathsf{hypot}\left(re, im\right)}}\\
\end{array}double f(double re, double im) {
double r18758 = 0.5;
double r18759 = 2.0;
double r18760 = re;
double r18761 = r18760 * r18760;
double r18762 = im;
double r18763 = r18762 * r18762;
double r18764 = r18761 + r18763;
double r18765 = sqrt(r18764);
double r18766 = r18765 - r18760;
double r18767 = r18759 * r18766;
double r18768 = sqrt(r18767);
double r18769 = r18758 * r18768;
return r18769;
}
double f(double re, double im) {
double r18770 = re;
double r18771 = 1.0740812147784067e-17;
bool r18772 = r18770 <= r18771;
double r18773 = 1.753869160177844e+51;
bool r18774 = r18770 <= r18773;
double r18775 = 1.0065728139945699e+120;
bool r18776 = r18770 <= r18775;
double r18777 = !r18776;
bool r18778 = r18774 || r18777;
double r18779 = !r18778;
bool r18780 = r18772 || r18779;
double r18781 = 0.5;
double r18782 = 2.0;
double r18783 = im;
double r18784 = hypot(r18770, r18783);
double r18785 = r18784 - r18770;
double r18786 = r18782 * r18785;
double r18787 = sqrt(r18786);
double r18788 = r18781 * r18787;
double r18789 = 2.0;
double r18790 = pow(r18783, r18789);
double r18791 = 0.0;
double r18792 = r18790 + r18791;
double r18793 = r18770 + r18784;
double r18794 = r18792 / r18793;
double r18795 = r18782 * r18794;
double r18796 = sqrt(r18795);
double r18797 = r18781 * r18796;
double r18798 = r18780 ? r18788 : r18797;
return r18798;
}



Bits error versus re



Bits error versus im
Results
if re < 1.0740812147784067e-17 or 1.753869160177844e+51 < re < 1.0065728139945699e+120Initial program 33.5
rmApplied hypot-def6.6
if 1.0740812147784067e-17 < re < 1.753869160177844e+51 or 1.0065728139945699e+120 < re Initial program 57.9
rmApplied flip--57.9
Simplified42.3
Simplified30.3
Final simplification11.6
herbie shell --seed 2020060 +o rules:numerics
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
:precision binary64
(* 0.5 (sqrt (* 2 (- (sqrt (+ (* re re) (* im im))) re)))))