0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -8789989068572990460:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -2.41337729739384158 \cdot 10^{-231}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{elif}\;re \le 1.67371517749345966 \cdot 10^{-296}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 9.62048641274337938 \cdot 10^{-76}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\
\mathbf{elif}\;re \le 1.3595218621366488 \cdot 10^{-48}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 5.49158337111390768 \cdot 10^{68}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\
\mathbf{elif}\;re \le 1.90167338956394558 \cdot 10^{88}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\
\end{array}double f(double re, double im) {
double r12867 = 0.5;
double r12868 = 2.0;
double r12869 = re;
double r12870 = r12869 * r12869;
double r12871 = im;
double r12872 = r12871 * r12871;
double r12873 = r12870 + r12872;
double r12874 = sqrt(r12873);
double r12875 = r12874 - r12869;
double r12876 = r12868 * r12875;
double r12877 = sqrt(r12876);
double r12878 = r12867 * r12877;
return r12878;
}
double f(double re, double im) {
double r12879 = re;
double r12880 = -8.78998906857299e+18;
bool r12881 = r12879 <= r12880;
double r12882 = 0.5;
double r12883 = 2.0;
double r12884 = -2.0;
double r12885 = r12884 * r12879;
double r12886 = r12883 * r12885;
double r12887 = sqrt(r12886);
double r12888 = r12882 * r12887;
double r12889 = -2.4133772973938416e-231;
bool r12890 = r12879 <= r12889;
double r12891 = r12879 * r12879;
double r12892 = im;
double r12893 = r12892 * r12892;
double r12894 = r12891 + r12893;
double r12895 = sqrt(r12894);
double r12896 = r12895 - r12879;
double r12897 = r12883 * r12896;
double r12898 = sqrt(r12897);
double r12899 = r12882 * r12898;
double r12900 = 1.6737151774934597e-296;
bool r12901 = r12879 <= r12900;
double r12902 = r12892 - r12879;
double r12903 = r12883 * r12902;
double r12904 = sqrt(r12903);
double r12905 = r12882 * r12904;
double r12906 = 9.620486412743379e-76;
bool r12907 = r12879 <= r12906;
double r12908 = 2.0;
double r12909 = pow(r12892, r12908);
double r12910 = r12895 + r12879;
double r12911 = r12909 / r12910;
double r12912 = r12883 * r12911;
double r12913 = sqrt(r12912);
double r12914 = r12882 * r12913;
double r12915 = 1.3595218621366488e-48;
bool r12916 = r12879 <= r12915;
double r12917 = 5.491583371113908e+68;
bool r12918 = r12879 <= r12917;
double r12919 = 1.9016733895639456e+88;
bool r12920 = r12879 <= r12919;
double r12921 = r12920 ? r12905 : r12914;
double r12922 = r12918 ? r12914 : r12921;
double r12923 = r12916 ? r12905 : r12922;
double r12924 = r12907 ? r12914 : r12923;
double r12925 = r12901 ? r12905 : r12924;
double r12926 = r12890 ? r12899 : r12925;
double r12927 = r12881 ? r12888 : r12926;
return r12927;
}



Bits error versus re



Bits error versus im
Results
if re < -8.78998906857299e+18Initial program 42.6
rmApplied add-sqr-sqrt42.6
Applied sqrt-prod42.6
rmApplied add-exp-log44.0
Taylor expanded around -inf 13.9
if -8.78998906857299e+18 < re < -2.4133772973938416e-231Initial program 18.6
if -2.4133772973938416e-231 < re < 1.6737151774934597e-296 or 9.620486412743379e-76 < re < 1.3595218621366488e-48 or 5.491583371113908e+68 < re < 1.9016733895639456e+88Initial program 36.0
Taylor expanded around 0 39.3
if 1.6737151774934597e-296 < re < 9.620486412743379e-76 or 1.3595218621366488e-48 < re < 5.491583371113908e+68 or 1.9016733895639456e+88 < re Initial program 46.8
rmApplied flip--46.6
Simplified36.9
Final simplification28.1
herbie shell --seed 2020036
(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)))))