0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -1.307585115624309216124260105110207840294 \cdot 10^{-42}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le -2.628807493432242249890478424299278330008 \cdot 10^{-95}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\
\mathbf{elif}\;im \le -9.677770542110420808800061902060254608143 \cdot 10^{-147}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\
\mathbf{elif}\;im \le -8.097842811387572585392563061395395075683 \cdot 10^{-243}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le 1.054568161257482803525852713126222588258 \cdot 10^{-300}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{\frac{2 \cdot re}{im}}}\\
\mathbf{elif}\;im \le 4.068654166237996793746604040555372844878 \cdot 10^{-193}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot im}}{\sqrt{\frac{re + \sqrt{re \cdot re + im \cdot im}}{im}}}\\
\mathbf{elif}\;im \le 2.566682872311100173898771653518908866918 \cdot 10^{-133}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;im \le 1.429821929476942571758399671404759856062 \cdot 10^{-96}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot im}}{\sqrt{\frac{re + \sqrt{re \cdot re + im \cdot im}}{im}}}\\
\mathbf{elif}\;im \le 3.14127497997689588006514124503829188465 \cdot 10^{-81}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\
\mathbf{elif}\;im \le 2.341360534110819251436825146816423482641 \cdot 10^{111}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot im}}{\sqrt{\frac{re + \sqrt{re \cdot re + im \cdot im}}{im}}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r18719 = 0.5;
double r18720 = 2.0;
double r18721 = re;
double r18722 = r18721 * r18721;
double r18723 = im;
double r18724 = r18723 * r18723;
double r18725 = r18722 + r18724;
double r18726 = sqrt(r18725);
double r18727 = r18726 - r18721;
double r18728 = r18720 * r18727;
double r18729 = sqrt(r18728);
double r18730 = r18719 * r18729;
return r18730;
}
double f(double re, double im) {
double r18731 = im;
double r18732 = -1.3075851156243092e-42;
bool r18733 = r18731 <= r18732;
double r18734 = 0.5;
double r18735 = 2.0;
double r18736 = re;
double r18737 = r18736 + r18731;
double r18738 = -r18737;
double r18739 = r18735 * r18738;
double r18740 = sqrt(r18739);
double r18741 = r18734 * r18740;
double r18742 = -2.6288074934322422e-95;
bool r18743 = r18731 <= r18742;
double r18744 = -r18736;
double r18745 = r18744 - r18736;
double r18746 = r18735 * r18745;
double r18747 = sqrt(r18746);
double r18748 = r18734 * r18747;
double r18749 = -9.677770542110421e-147;
bool r18750 = r18731 <= r18749;
double r18751 = r18731 * r18731;
double r18752 = r18735 * r18751;
double r18753 = sqrt(r18752);
double r18754 = r18736 * r18736;
double r18755 = r18754 + r18751;
double r18756 = sqrt(r18755);
double r18757 = r18736 + r18756;
double r18758 = sqrt(r18757);
double r18759 = r18753 / r18758;
double r18760 = r18734 * r18759;
double r18761 = -8.097842811387573e-243;
bool r18762 = r18731 <= r18761;
double r18763 = 1.0545681612574828e-300;
bool r18764 = r18731 <= r18763;
double r18765 = 2.0;
double r18766 = r18765 * r18736;
double r18767 = r18766 / r18731;
double r18768 = r18731 / r18767;
double r18769 = r18735 * r18768;
double r18770 = sqrt(r18769);
double r18771 = r18734 * r18770;
double r18772 = 4.068654166237997e-193;
bool r18773 = r18731 <= r18772;
double r18774 = r18735 * r18731;
double r18775 = sqrt(r18774);
double r18776 = r18757 / r18731;
double r18777 = sqrt(r18776);
double r18778 = r18775 / r18777;
double r18779 = r18734 * r18778;
double r18780 = 2.5666828723111e-133;
bool r18781 = r18731 <= r18780;
double r18782 = log(r18756);
double r18783 = exp(r18782);
double r18784 = sqrt(r18783);
double r18785 = sqrt(r18756);
double r18786 = r18784 * r18785;
double r18787 = r18786 - r18736;
double r18788 = r18735 * r18787;
double r18789 = sqrt(r18788);
double r18790 = r18734 * r18789;
double r18791 = 1.4298219294769426e-96;
bool r18792 = r18731 <= r18791;
double r18793 = 3.141274979976896e-81;
bool r18794 = r18731 <= r18793;
double r18795 = 2.3413605341108193e+111;
bool r18796 = r18731 <= r18795;
double r18797 = r18731 - r18736;
double r18798 = r18735 * r18797;
double r18799 = sqrt(r18798);
double r18800 = r18734 * r18799;
double r18801 = r18796 ? r18779 : r18800;
double r18802 = r18794 ? r18748 : r18801;
double r18803 = r18792 ? r18779 : r18802;
double r18804 = r18781 ? r18790 : r18803;
double r18805 = r18773 ? r18779 : r18804;
double r18806 = r18764 ? r18771 : r18805;
double r18807 = r18762 ? r18741 : r18806;
double r18808 = r18750 ? r18760 : r18807;
double r18809 = r18743 ? r18748 : r18808;
double r18810 = r18733 ? r18741 : r18809;
return r18810;
}



Bits error versus re



Bits error versus im
Results
if im < -1.3075851156243092e-42 or -9.677770542110421e-147 < im < -8.097842811387573e-243Initial program 40.6
rmApplied add-sqr-sqrt40.6
Applied sqrt-prod40.7
rmApplied flip--45.6
Simplified42.6
Simplified42.6
Taylor expanded around -inf 22.7
if -1.3075851156243092e-42 < im < -2.6288074934322422e-95 or 1.4298219294769426e-96 < im < 3.141274979976896e-81Initial program 28.7
rmApplied add-sqr-sqrt28.7
Applied sqrt-prod28.9
Taylor expanded around -inf 45.5
Simplified45.5
if -2.6288074934322422e-95 < im < -9.677770542110421e-147Initial program 30.5
rmApplied add-sqr-sqrt30.5
Applied sqrt-prod30.8
rmApplied flip--43.2
Simplified34.5
Simplified34.5
rmApplied associate-*r/34.5
Applied sqrt-div31.0
if -8.097842811387573e-243 < im < 1.0545681612574828e-300Initial program 41.0
rmApplied add-sqr-sqrt41.0
Applied sqrt-prod43.6
rmApplied flip--57.9
Simplified48.3
Simplified48.6
rmApplied associate-/l*48.3
Taylor expanded around inf 46.5
if 1.0545681612574828e-300 < im < 4.068654166237997e-193 or 2.5666828723111e-133 < im < 1.4298219294769426e-96 or 3.141274979976896e-81 < im < 2.3413605341108193e+111Initial program 29.6
rmApplied add-sqr-sqrt29.6
Applied sqrt-prod30.1
rmApplied flip--39.5
Simplified32.6
Simplified32.7
rmApplied associate-/l*32.3
rmApplied associate-*r/32.3
Applied sqrt-div29.1
if 4.068654166237997e-193 < im < 2.5666828723111e-133Initial program 39.0
rmApplied add-sqr-sqrt39.0
Applied sqrt-prod39.2
rmApplied add-exp-log40.3
if 2.3413605341108193e+111 < im Initial program 52.7
Taylor expanded around 0 8.5
Final simplification26.2
herbie shell --seed 2019351
(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)))))