0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -2.988050716372587735980886101473626059348 \cdot 10^{94}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le -2.408385642641786286480008837094784713248 \cdot 10^{-139}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{\frac{re + \sqrt{re \cdot re + im \cdot im}}{im}}}\\
\mathbf{elif}\;im \le -1.98927377824392110917094836198550216755 \cdot 10^{-194}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le -7.445258062611977880073739529579082335909 \cdot 10^{-232}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le 4.197900270983836794266681002151534754925 \cdot 10^{-173}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 0.06696772449087015632862573966121999546885:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r16284 = 0.5;
double r16285 = 2.0;
double r16286 = re;
double r16287 = r16286 * r16286;
double r16288 = im;
double r16289 = r16288 * r16288;
double r16290 = r16287 + r16289;
double r16291 = sqrt(r16290);
double r16292 = r16291 - r16286;
double r16293 = r16285 * r16292;
double r16294 = sqrt(r16293);
double r16295 = r16284 * r16294;
return r16295;
}
double f(double re, double im) {
double r16296 = im;
double r16297 = -2.9880507163725877e+94;
bool r16298 = r16296 <= r16297;
double r16299 = 0.5;
double r16300 = 2.0;
double r16301 = re;
double r16302 = r16301 + r16296;
double r16303 = -r16302;
double r16304 = r16300 * r16303;
double r16305 = sqrt(r16304);
double r16306 = r16299 * r16305;
double r16307 = -2.4083856426417863e-139;
bool r16308 = r16296 <= r16307;
double r16309 = r16301 * r16301;
double r16310 = r16296 * r16296;
double r16311 = r16309 + r16310;
double r16312 = sqrt(r16311);
double r16313 = r16301 + r16312;
double r16314 = r16313 / r16296;
double r16315 = r16296 / r16314;
double r16316 = r16300 * r16315;
double r16317 = sqrt(r16316);
double r16318 = r16299 * r16317;
double r16319 = -1.989273778243921e-194;
bool r16320 = r16296 <= r16319;
double r16321 = -2.0;
double r16322 = r16321 * r16301;
double r16323 = r16300 * r16322;
double r16324 = sqrt(r16323);
double r16325 = r16299 * r16324;
double r16326 = -7.445258062611978e-232;
bool r16327 = r16296 <= r16326;
double r16328 = 4.197900270983837e-173;
bool r16329 = r16296 <= r16328;
double r16330 = 0.06696772449087016;
bool r16331 = r16296 <= r16330;
double r16332 = r16300 * r16310;
double r16333 = sqrt(r16332);
double r16334 = sqrt(r16313);
double r16335 = r16333 / r16334;
double r16336 = r16299 * r16335;
double r16337 = r16296 - r16301;
double r16338 = r16300 * r16337;
double r16339 = sqrt(r16338);
double r16340 = r16299 * r16339;
double r16341 = r16331 ? r16336 : r16340;
double r16342 = r16329 ? r16325 : r16341;
double r16343 = r16327 ? r16306 : r16342;
double r16344 = r16320 ? r16325 : r16343;
double r16345 = r16308 ? r16318 : r16344;
double r16346 = r16298 ? r16306 : r16345;
return r16346;
}



Bits error versus re



Bits error versus im
Results
if im < -2.9880507163725877e+94 or -1.989273778243921e-194 < im < -7.445258062611978e-232Initial program 48.6
rmApplied add-sqr-sqrt48.6
Applied sqrt-prod48.7
rmApplied flip--51.9
Simplified51.1
Simplified51.1
Taylor expanded around -inf 16.7
if -2.9880507163725877e+94 < im < -2.4083856426417863e-139Initial program 24.3
rmApplied add-sqr-sqrt24.3
Applied sqrt-prod24.4
rmApplied flip--32.3
Simplified24.4
Simplified24.4
rmApplied associate-/l*24.4
if -2.4083856426417863e-139 < im < -1.989273778243921e-194 or -7.445258062611978e-232 < im < 4.197900270983837e-173Initial program 42.9
rmApplied add-sqr-sqrt42.9
Applied sqrt-prod44.0
Taylor expanded around -inf 35.0
if 4.197900270983837e-173 < im < 0.06696772449087016Initial program 29.3
rmApplied add-sqr-sqrt29.3
Applied sqrt-prod29.5
rmApplied flip--39.3
Simplified30.9
Simplified31.0
rmApplied associate-*r/31.0
Applied sqrt-div29.3
if 0.06696772449087016 < im Initial program 41.1
Taylor expanded around 0 15.1
Final simplification23.6
herbie shell --seed 2019350
(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)))))