0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -2.5049311841338231 \cdot 10^{32}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le -1.9966008063578885 \cdot 10^{-140}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}\\
\mathbf{elif}\;im \le -3.01639347464622636 \cdot 10^{-204}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;im \le -4.18314743586454744 \cdot 10^{-212}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{re + re}}\\
\mathbf{elif}\;im \le 1.44934742306435742 \cdot 10^{-115}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r19649 = 0.5;
double r19650 = 2.0;
double r19651 = re;
double r19652 = r19651 * r19651;
double r19653 = im;
double r19654 = r19653 * r19653;
double r19655 = r19652 + r19654;
double r19656 = sqrt(r19655);
double r19657 = r19656 - r19651;
double r19658 = r19650 * r19657;
double r19659 = sqrt(r19658);
double r19660 = r19649 * r19659;
return r19660;
}
double f(double re, double im) {
double r19661 = im;
double r19662 = -2.504931184133823e+32;
bool r19663 = r19661 <= r19662;
double r19664 = 0.5;
double r19665 = 2.0;
double r19666 = re;
double r19667 = r19666 + r19661;
double r19668 = -r19667;
double r19669 = r19665 * r19668;
double r19670 = sqrt(r19669);
double r19671 = r19664 * r19670;
double r19672 = -1.9966008063578885e-140;
bool r19673 = r19661 <= r19672;
double r19674 = sqrt(r19665);
double r19675 = r19666 * r19666;
double r19676 = r19661 * r19661;
double r19677 = r19675 + r19676;
double r19678 = sqrt(r19677);
double r19679 = r19678 + r19666;
double r19680 = sqrt(r19679);
double r19681 = fabs(r19661);
double r19682 = r19680 / r19681;
double r19683 = r19674 / r19682;
double r19684 = r19664 * r19683;
double r19685 = -3.0163934746462264e-204;
bool r19686 = r19661 <= r19685;
double r19687 = -1.0;
double r19688 = r19687 * r19666;
double r19689 = r19688 - r19666;
double r19690 = r19665 * r19689;
double r19691 = sqrt(r19690);
double r19692 = r19664 * r19691;
double r19693 = -4.1831474358645474e-212;
bool r19694 = r19661 <= r19693;
double r19695 = r19674 * r19681;
double r19696 = r19666 + r19666;
double r19697 = sqrt(r19696);
double r19698 = r19695 / r19697;
double r19699 = r19664 * r19698;
double r19700 = 1.4493474230643574e-115;
bool r19701 = r19661 <= r19700;
double r19702 = r19661 - r19666;
double r19703 = r19665 * r19702;
double r19704 = sqrt(r19703);
double r19705 = r19664 * r19704;
double r19706 = r19701 ? r19692 : r19705;
double r19707 = r19694 ? r19699 : r19706;
double r19708 = r19686 ? r19692 : r19707;
double r19709 = r19673 ? r19684 : r19708;
double r19710 = r19663 ? r19671 : r19709;
return r19710;
}



Bits error versus re



Bits error versus im
Results
if im < -2.504931184133823e+32Initial program 43.6
rmApplied flip--45.2
Simplified43.7
Taylor expanded around -inf 14.3
if -2.504931184133823e+32 < im < -1.9966008063578885e-140Initial program 25.0
rmApplied flip--35.5
Simplified26.8
rmApplied associate-*r/26.8
Applied sqrt-div26.0
rmApplied sqrt-prod26.1
Simplified26.1
rmApplied associate-/l*26.1
if -1.9966008063578885e-140 < im < -3.0163934746462264e-204 or -4.1831474358645474e-212 < im < 1.4493474230643574e-115Initial program 42.9
Taylor expanded around -inf 37.0
if -3.0163934746462264e-204 < im < -4.1831474358645474e-212Initial program 46.6
rmApplied flip--62.6
Simplified54.8
rmApplied associate-*r/54.8
Applied sqrt-div55.0
rmApplied sqrt-prod55.0
Simplified41.8
Taylor expanded around inf 34.3
if 1.4493474230643574e-115 < im Initial program 36.6
Taylor expanded around 0 20.2
Final simplification24.4
herbie shell --seed 2020056
(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)))))