0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -6.8846914672875272 \cdot 10^{72}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -6.10111052612686754 \cdot 10^{-93}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;re \le -3.3124292600034948 \cdot 10^{-125}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le -7.54474836196326423 \cdot 10^{-281}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} + re}}\\
\end{array}double f(double re, double im) {
double r15164 = 0.5;
double r15165 = 2.0;
double r15166 = re;
double r15167 = r15166 * r15166;
double r15168 = im;
double r15169 = r15168 * r15168;
double r15170 = r15167 + r15169;
double r15171 = sqrt(r15170);
double r15172 = r15171 - r15166;
double r15173 = r15165 * r15172;
double r15174 = sqrt(r15173);
double r15175 = r15164 * r15174;
return r15175;
}
double f(double re, double im) {
double r15176 = re;
double r15177 = -6.884691467287527e+72;
bool r15178 = r15176 <= r15177;
double r15179 = 0.5;
double r15180 = 2.0;
double r15181 = -2.0;
double r15182 = r15181 * r15176;
double r15183 = r15180 * r15182;
double r15184 = sqrt(r15183);
double r15185 = r15179 * r15184;
double r15186 = -6.1011105261268675e-93;
bool r15187 = r15176 <= r15186;
double r15188 = r15176 * r15176;
double r15189 = im;
double r15190 = r15189 * r15189;
double r15191 = r15188 + r15190;
double r15192 = sqrt(r15191);
double r15193 = sqrt(r15192);
double r15194 = r15193 * r15193;
double r15195 = r15194 - r15176;
double r15196 = r15180 * r15195;
double r15197 = sqrt(r15196);
double r15198 = r15179 * r15197;
double r15199 = -3.312429260003495e-125;
bool r15200 = r15176 <= r15199;
double r15201 = r15189 - r15176;
double r15202 = r15180 * r15201;
double r15203 = sqrt(r15202);
double r15204 = r15179 * r15203;
double r15205 = -7.544748361963264e-281;
bool r15206 = r15176 <= r15205;
double r15207 = r15192 + r15176;
double r15208 = r15190 / r15207;
double r15209 = r15180 * r15208;
double r15210 = sqrt(r15209);
double r15211 = r15179 * r15210;
double r15212 = r15206 ? r15198 : r15211;
double r15213 = r15200 ? r15204 : r15212;
double r15214 = r15187 ? r15198 : r15213;
double r15215 = r15178 ? r15185 : r15214;
return r15215;
}



Bits error versus re



Bits error versus im
Results
if re < -6.884691467287527e+72Initial program 47.3
Taylor expanded around -inf 12.7
if -6.884691467287527e+72 < re < -6.1011105261268675e-93 or -3.312429260003495e-125 < re < -7.544748361963264e-281Initial program 20.9
rmApplied add-sqr-sqrt20.9
Applied sqrt-prod21.0
if -6.1011105261268675e-93 < re < -3.312429260003495e-125Initial program 17.7
Taylor expanded around 0 36.6
if -7.544748361963264e-281 < re Initial program 45.8
rmApplied flip--45.7
Simplified36.0
Final simplification27.7
herbie shell --seed 2020083
(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)))))