0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -4.2696195727379345 \cdot 10^{139}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\
\mathbf{elif}\;re \le -3.87971466314923503 \cdot 10^{-161}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{1} \cdot \sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{elif}\;re \le 3.06622232904101925 \cdot 10^{-255}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{{im}^{2} \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\
\end{array}double f(double re, double im) {
double r17045 = 0.5;
double r17046 = 2.0;
double r17047 = re;
double r17048 = r17047 * r17047;
double r17049 = im;
double r17050 = r17049 * r17049;
double r17051 = r17048 + r17050;
double r17052 = sqrt(r17051);
double r17053 = r17052 - r17047;
double r17054 = r17046 * r17053;
double r17055 = sqrt(r17054);
double r17056 = r17045 * r17055;
return r17056;
}
double f(double re, double im) {
double r17057 = re;
double r17058 = -4.2696195727379345e+139;
bool r17059 = r17057 <= r17058;
double r17060 = 0.5;
double r17061 = 2.0;
double r17062 = -r17057;
double r17063 = r17062 - r17057;
double r17064 = r17061 * r17063;
double r17065 = sqrt(r17064);
double r17066 = r17060 * r17065;
double r17067 = -3.879714663149235e-161;
bool r17068 = r17057 <= r17067;
double r17069 = 1.0;
double r17070 = sqrt(r17069);
double r17071 = r17057 * r17057;
double r17072 = im;
double r17073 = r17072 * r17072;
double r17074 = r17071 + r17073;
double r17075 = sqrt(r17074);
double r17076 = r17070 * r17075;
double r17077 = r17076 - r17057;
double r17078 = r17061 * r17077;
double r17079 = sqrt(r17078);
double r17080 = r17060 * r17079;
double r17081 = 3.0662223290410192e-255;
bool r17082 = r17057 <= r17081;
double r17083 = r17072 - r17057;
double r17084 = r17061 * r17083;
double r17085 = sqrt(r17084);
double r17086 = r17060 * r17085;
double r17087 = 2.0;
double r17088 = pow(r17072, r17087);
double r17089 = r17088 * r17061;
double r17090 = sqrt(r17089);
double r17091 = r17075 + r17057;
double r17092 = sqrt(r17091);
double r17093 = r17090 / r17092;
double r17094 = r17060 * r17093;
double r17095 = r17082 ? r17086 : r17094;
double r17096 = r17068 ? r17080 : r17095;
double r17097 = r17059 ? r17066 : r17096;
return r17097;
}



Bits error versus re



Bits error versus im
Results
if re < -4.2696195727379345e+139Initial program 59.5
rmApplied add-sqr-sqrt59.5
Applied sqrt-prod59.5
Taylor expanded around -inf 8.4
Simplified8.4
if -4.2696195727379345e+139 < re < -3.879714663149235e-161Initial program 16.9
rmApplied add-sqr-sqrt16.9
Applied sqrt-prod17.0
rmApplied *-un-lft-identity17.0
Applied sqrt-prod17.0
Applied associate-*l*17.0
Simplified16.9
if -3.879714663149235e-161 < re < 3.0662223290410192e-255Initial program 31.3
rmApplied add-sqr-sqrt31.3
Applied sqrt-prod31.4
rmApplied add-sqr-sqrt31.4
Applied sqrt-prod31.4
Applied sqrt-prod31.5
Applied associate-*r*31.4
Simplified31.5
Taylor expanded around 0 33.3
if 3.0662223290410192e-255 < re Initial program 47.7
rmApplied flip--47.6
Applied associate-*r/47.6
Applied sqrt-div47.7
Simplified36.2
Final simplification27.2
herbie shell --seed 2020047
(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)))))