0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -3.6111760266152055 \cdot 10^{-08}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2.0}\\
\mathbf{elif}\;im \le -2.9634639532950256 \cdot 10^{-188}:\\
\;\;\;\;\sqrt{2.0 \cdot \frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} + re}{im}}} \cdot 0.5\\
\mathbf{elif}\;im \le 6.510449215984508 \cdot 10^{-134}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\
\mathbf{elif}\;im \le 1.1476303183370092 \cdot 10^{+117}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\left(im - re\right) \cdot 2.0} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r945131 = 0.5;
double r945132 = 2.0;
double r945133 = re;
double r945134 = r945133 * r945133;
double r945135 = im;
double r945136 = r945135 * r945135;
double r945137 = r945134 + r945136;
double r945138 = sqrt(r945137);
double r945139 = r945138 - r945133;
double r945140 = r945132 * r945139;
double r945141 = sqrt(r945140);
double r945142 = r945131 * r945141;
return r945142;
}
double f(double re, double im) {
double r945143 = im;
double r945144 = -3.6111760266152055e-08;
bool r945145 = r945143 <= r945144;
double r945146 = 0.5;
double r945147 = re;
double r945148 = r945147 + r945143;
double r945149 = -r945148;
double r945150 = 2.0;
double r945151 = r945149 * r945150;
double r945152 = sqrt(r945151);
double r945153 = r945146 * r945152;
double r945154 = -2.9634639532950256e-188;
bool r945155 = r945143 <= r945154;
double r945156 = r945147 * r945147;
double r945157 = r945143 * r945143;
double r945158 = r945156 + r945157;
double r945159 = sqrt(r945158);
double r945160 = r945159 + r945147;
double r945161 = r945160 / r945143;
double r945162 = r945143 / r945161;
double r945163 = r945150 * r945162;
double r945164 = sqrt(r945163);
double r945165 = r945164 * r945146;
double r945166 = 6.510449215984508e-134;
bool r945167 = r945143 <= r945166;
double r945168 = -2.0;
double r945169 = r945147 * r945168;
double r945170 = r945150 * r945169;
double r945171 = sqrt(r945170);
double r945172 = r945171 * r945146;
double r945173 = 1.1476303183370092e+117;
bool r945174 = r945143 <= r945173;
double r945175 = sqrt(r945159);
double r945176 = r945175 * r945175;
double r945177 = r945176 - r945147;
double r945178 = r945150 * r945177;
double r945179 = sqrt(r945178);
double r945180 = r945146 * r945179;
double r945181 = r945143 - r945147;
double r945182 = r945181 * r945150;
double r945183 = sqrt(r945182);
double r945184 = r945183 * r945146;
double r945185 = r945174 ? r945180 : r945184;
double r945186 = r945167 ? r945172 : r945185;
double r945187 = r945155 ? r945165 : r945186;
double r945188 = r945145 ? r945153 : r945187;
return r945188;
}



Bits error versus re



Bits error versus im
Results
if im < -3.6111760266152055e-08Initial program 40.1
rmApplied flip--42.2
Simplified40.9
Taylor expanded around -inf 14.4
if -3.6111760266152055e-08 < im < -2.9634639532950256e-188Initial program 29.8
rmApplied flip--41.4
Simplified31.9
rmApplied associate-/l*30.8
if -2.9634639532950256e-188 < im < 6.510449215984508e-134Initial program 42.2
Taylor expanded around -inf 35.1
if 6.510449215984508e-134 < im < 1.1476303183370092e+117Initial program 22.8
rmApplied add-sqr-sqrt22.8
Applied sqrt-prod22.9
if 1.1476303183370092e+117 < im Initial program 52.5
Taylor expanded around 0 9.1
Final simplification22.6
herbie shell --seed 2019163
(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)))))