0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.9269100752906168 \cdot 10^{+118}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\
\mathbf{elif}\;re \le 7.868345022022993 \cdot 10^{-278}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left(\sqrt{\sqrt[3]{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right|\right) - re\right)}\\
\mathbf{elif}\;re \le 1.2200692986423622 \cdot 10^{-144}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r1581085 = 0.5;
double r1581086 = 2.0;
double r1581087 = re;
double r1581088 = r1581087 * r1581087;
double r1581089 = im;
double r1581090 = r1581089 * r1581089;
double r1581091 = r1581088 + r1581090;
double r1581092 = sqrt(r1581091);
double r1581093 = r1581092 - r1581087;
double r1581094 = r1581086 * r1581093;
double r1581095 = sqrt(r1581094);
double r1581096 = r1581085 * r1581095;
return r1581096;
}
double f(double re, double im) {
double r1581097 = re;
double r1581098 = -1.9269100752906168e+118;
bool r1581099 = r1581097 <= r1581098;
double r1581100 = -2.0;
double r1581101 = r1581100 * r1581097;
double r1581102 = 2.0;
double r1581103 = r1581101 * r1581102;
double r1581104 = sqrt(r1581103);
double r1581105 = 0.5;
double r1581106 = r1581104 * r1581105;
double r1581107 = 7.868345022022993e-278;
bool r1581108 = r1581097 <= r1581107;
double r1581109 = im;
double r1581110 = r1581109 * r1581109;
double r1581111 = r1581097 * r1581097;
double r1581112 = r1581110 + r1581111;
double r1581113 = cbrt(r1581112);
double r1581114 = cbrt(r1581113);
double r1581115 = sqrt(r1581114);
double r1581116 = r1581113 * r1581113;
double r1581117 = cbrt(r1581116);
double r1581118 = sqrt(r1581117);
double r1581119 = fabs(r1581113);
double r1581120 = r1581118 * r1581119;
double r1581121 = r1581115 * r1581120;
double r1581122 = r1581121 - r1581097;
double r1581123 = r1581102 * r1581122;
double r1581124 = sqrt(r1581123);
double r1581125 = r1581105 * r1581124;
double r1581126 = 1.2200692986423622e-144;
bool r1581127 = r1581097 <= r1581126;
double r1581128 = r1581109 - r1581097;
double r1581129 = r1581102 * r1581128;
double r1581130 = sqrt(r1581129);
double r1581131 = r1581105 * r1581130;
double r1581132 = r1581110 * r1581102;
double r1581133 = sqrt(r1581132);
double r1581134 = sqrt(r1581112);
double r1581135 = r1581134 + r1581097;
double r1581136 = sqrt(r1581135);
double r1581137 = r1581133 / r1581136;
double r1581138 = r1581137 * r1581105;
double r1581139 = r1581127 ? r1581131 : r1581138;
double r1581140 = r1581108 ? r1581125 : r1581139;
double r1581141 = r1581099 ? r1581106 : r1581140;
return r1581141;
}



Bits error versus re



Bits error versus im
Results
if re < -1.9269100752906168e+118Initial program 51.9
Taylor expanded around -inf 9.3
if -1.9269100752906168e+118 < re < 7.868345022022993e-278Initial program 20.5
rmApplied add-cube-cbrt20.8
Applied sqrt-prod20.8
Simplified20.8
rmApplied add-cube-cbrt20.8
Applied cbrt-prod20.9
Applied sqrt-prod20.9
Applied associate-*r*20.9
if 7.868345022022993e-278 < re < 1.2200692986423622e-144Initial program 30.0
Taylor expanded around 0 35.3
if 1.2200692986423622e-144 < re Initial program 50.4
rmApplied flip--50.4
Applied associate-*r/50.4
Applied sqrt-div50.4
Simplified36.7
Final simplification26.4
herbie shell --seed 2019128
(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)))))