0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -8.039547558546271631628934502111036051442 \cdot 10^{104}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2} \cdot 0.5\\
\mathbf{elif}\;re \le -3.240034389533803828723034610715031267776 \cdot 10^{-262}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right) \cdot 2}\\
\mathbf{elif}\;re \le 5.712445954823859518117956639119879892462 \cdot 10^{-130}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r1030783 = 0.5;
double r1030784 = 2.0;
double r1030785 = re;
double r1030786 = r1030785 * r1030785;
double r1030787 = im;
double r1030788 = r1030787 * r1030787;
double r1030789 = r1030786 + r1030788;
double r1030790 = sqrt(r1030789);
double r1030791 = r1030790 - r1030785;
double r1030792 = r1030784 * r1030791;
double r1030793 = sqrt(r1030792);
double r1030794 = r1030783 * r1030793;
return r1030794;
}
double f(double re, double im) {
double r1030795 = re;
double r1030796 = -8.039547558546272e+104;
bool r1030797 = r1030795 <= r1030796;
double r1030798 = -2.0;
double r1030799 = r1030798 * r1030795;
double r1030800 = 2.0;
double r1030801 = r1030799 * r1030800;
double r1030802 = sqrt(r1030801);
double r1030803 = 0.5;
double r1030804 = r1030802 * r1030803;
double r1030805 = -3.240034389533804e-262;
bool r1030806 = r1030795 <= r1030805;
double r1030807 = r1030795 * r1030795;
double r1030808 = im;
double r1030809 = r1030808 * r1030808;
double r1030810 = r1030807 + r1030809;
double r1030811 = sqrt(r1030810);
double r1030812 = sqrt(r1030811);
double r1030813 = r1030812 * r1030812;
double r1030814 = r1030813 - r1030795;
double r1030815 = r1030814 * r1030800;
double r1030816 = sqrt(r1030815);
double r1030817 = r1030803 * r1030816;
double r1030818 = 5.7124459548238595e-130;
bool r1030819 = r1030795 <= r1030818;
double r1030820 = r1030808 - r1030795;
double r1030821 = r1030800 * r1030820;
double r1030822 = sqrt(r1030821);
double r1030823 = r1030803 * r1030822;
double r1030824 = r1030809 * r1030800;
double r1030825 = sqrt(r1030824);
double r1030826 = r1030795 + r1030811;
double r1030827 = sqrt(r1030826);
double r1030828 = r1030825 / r1030827;
double r1030829 = r1030828 * r1030803;
double r1030830 = r1030819 ? r1030823 : r1030829;
double r1030831 = r1030806 ? r1030817 : r1030830;
double r1030832 = r1030797 ? r1030804 : r1030831;
return r1030832;
}



Bits error versus re



Bits error versus im
Results
if re < -8.039547558546272e+104Initial program 52.4
Taylor expanded around -inf 9.4
if -8.039547558546272e+104 < re < -3.240034389533804e-262Initial program 19.5
rmApplied add-sqr-sqrt19.5
Applied sqrt-prod19.6
rmApplied *-un-lft-identity19.6
Applied associate-*r*19.6
if -3.240034389533804e-262 < re < 5.7124459548238595e-130Initial program 31.7
Taylor expanded around 0 35.0
if 5.7124459548238595e-130 < re Initial program 52.0
rmApplied flip--52.0
Applied associate-*r/52.0
Applied sqrt-div52.0
Simplified37.1
Final simplification27.0
herbie shell --seed 2019200
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
(* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))