0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -1.628723451170046 \cdot 10^{+127}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2.0}\\
\mathbf{elif}\;im \le 5.6452215836668445 \cdot 10^{-174}:\\
\;\;\;\;\left(\sqrt{\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}} \cdot \sqrt{\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}}\right) \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\
\end{array}double f(double re, double im) {
double r864470 = 0.5;
double r864471 = 2.0;
double r864472 = re;
double r864473 = r864472 * r864472;
double r864474 = im;
double r864475 = r864474 * r864474;
double r864476 = r864473 + r864475;
double r864477 = sqrt(r864476);
double r864478 = r864477 - r864472;
double r864479 = r864471 * r864478;
double r864480 = sqrt(r864479);
double r864481 = r864470 * r864480;
return r864481;
}
double f(double re, double im) {
double r864482 = im;
double r864483 = -1.628723451170046e+127;
bool r864484 = r864482 <= r864483;
double r864485 = 0.5;
double r864486 = re;
double r864487 = r864486 + r864482;
double r864488 = -r864487;
double r864489 = 2.0;
double r864490 = r864488 * r864489;
double r864491 = sqrt(r864490);
double r864492 = r864485 * r864491;
double r864493 = 5.6452215836668445e-174;
bool r864494 = r864482 <= r864493;
double r864495 = r864482 * r864482;
double r864496 = r864486 * r864486;
double r864497 = r864495 + r864496;
double r864498 = sqrt(r864497);
double r864499 = r864498 - r864486;
double r864500 = r864489 * r864499;
double r864501 = sqrt(r864500);
double r864502 = sqrt(r864501);
double r864503 = r864502 * r864502;
double r864504 = r864503 * r864485;
double r864505 = r864482 - r864486;
double r864506 = r864505 * r864489;
double r864507 = sqrt(r864506);
double r864508 = r864485 * r864507;
double r864509 = r864494 ? r864504 : r864508;
double r864510 = r864484 ? r864492 : r864509;
return r864510;
}



Bits error versus re



Bits error versus im
Results
if im < -1.628723451170046e+127Initial program 54.6
Taylor expanded around -inf 54.6
Simplified54.6
rmApplied add-exp-log55.2
Taylor expanded around -inf 8.9
if -1.628723451170046e+127 < im < 5.6452215836668445e-174Initial program 33.0
Taylor expanded around -inf 33.0
Simplified33.0
rmApplied add-sqr-sqrt33.2
if 5.6452215836668445e-174 < im Initial program 36.3
Taylor expanded around 0 22.7
Final simplification25.4
herbie shell --seed 2019104
(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)))))