0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -6.991664128554264 \cdot 10^{+84}:\\
\;\;\;\;0.5 \cdot \sqrt{-4.0 \cdot re}\\
\mathbf{elif}\;re \le -1.8535095195161492 \cdot 10^{-179}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{im \cdot im + re \cdot re} - re\right) \cdot 2.0}\\
\mathbf{elif}\;re \le 7.873406083661657 \cdot 10^{-245}:\\
\;\;\;\;\sqrt{\left(im - re\right) \cdot 2.0} \cdot 0.5\\
\mathbf{elif}\;re \le 5.042112965232755 \cdot 10^{+122}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{\left(im \cdot im\right) \cdot 2.0}{re + \sqrt{im \cdot im + re \cdot re}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{re + re}} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r520143 = 0.5;
double r520144 = 2.0;
double r520145 = re;
double r520146 = r520145 * r520145;
double r520147 = im;
double r520148 = r520147 * r520147;
double r520149 = r520146 + r520148;
double r520150 = sqrt(r520149);
double r520151 = r520150 - r520145;
double r520152 = r520144 * r520151;
double r520153 = sqrt(r520152);
double r520154 = r520143 * r520153;
return r520154;
}
double f(double re, double im) {
double r520155 = re;
double r520156 = -6.991664128554264e+84;
bool r520157 = r520155 <= r520156;
double r520158 = 0.5;
double r520159 = -4.0;
double r520160 = r520159 * r520155;
double r520161 = sqrt(r520160);
double r520162 = r520158 * r520161;
double r520163 = -1.8535095195161492e-179;
bool r520164 = r520155 <= r520163;
double r520165 = im;
double r520166 = r520165 * r520165;
double r520167 = r520155 * r520155;
double r520168 = r520166 + r520167;
double r520169 = sqrt(r520168);
double r520170 = r520169 - r520155;
double r520171 = 2.0;
double r520172 = r520170 * r520171;
double r520173 = sqrt(r520172);
double r520174 = r520158 * r520173;
double r520175 = 7.873406083661657e-245;
bool r520176 = r520155 <= r520175;
double r520177 = r520165 - r520155;
double r520178 = r520177 * r520171;
double r520179 = sqrt(r520178);
double r520180 = r520179 * r520158;
double r520181 = 5.042112965232755e+122;
bool r520182 = r520155 <= r520181;
double r520183 = r520166 * r520171;
double r520184 = r520155 + r520169;
double r520185 = r520183 / r520184;
double r520186 = sqrt(r520185);
double r520187 = r520158 * r520186;
double r520188 = sqrt(r520183);
double r520189 = r520155 + r520155;
double r520190 = sqrt(r520189);
double r520191 = r520188 / r520190;
double r520192 = r520191 * r520158;
double r520193 = r520182 ? r520187 : r520192;
double r520194 = r520176 ? r520180 : r520193;
double r520195 = r520164 ? r520174 : r520194;
double r520196 = r520157 ? r520162 : r520195;
return r520196;
}



Bits error versus re



Bits error versus im
Results
if re < -6.991664128554264e+84Initial program 47.2
Taylor expanded around -inf 12.2
if -6.991664128554264e+84 < re < -1.8535095195161492e-179Initial program 16.4
rmApplied *-commutative16.4
if -1.8535095195161492e-179 < re < 7.873406083661657e-245Initial program 28.6
rmApplied *-commutative28.6
Taylor expanded around 0 32.7
if 7.873406083661657e-245 < re < 5.042112965232755e+122Initial program 39.8
rmApplied *-commutative39.8
rmApplied flip--39.8
Applied associate-*l/39.8
Applied sqrt-div39.9
Simplified30.0
rmApplied sqrt-undiv31.0
Simplified31.0
if 5.042112965232755e+122 < re Initial program 60.2
rmApplied *-commutative60.2
rmApplied flip--60.2
Applied associate-*l/60.2
Applied sqrt-div60.2
Simplified45.3
Taylor expanded around inf 20.6
Final simplification23.1
herbie shell --seed 2019146
(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)))))