0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -4.133795376408894095114882696362622107441 \cdot 10^{79}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2} \cdot 0.5\\
\mathbf{elif}\;re \le -4.294056025198942265014484360305623504037 \cdot 10^{-308}:\\
\;\;\;\;\sqrt{\left(\left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\left|\sqrt[3]{im \cdot im + re \cdot re}\right|}\right) \cdot \sqrt{\sqrt{\left(\sqrt[3]{\sqrt[3]{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt[3]{im \cdot im + re \cdot re}}\right) \cdot \sqrt[3]{\sqrt[3]{im \cdot im + re \cdot re}}}} - re\right) \cdot 2} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2}\\
\end{array}double f(double re, double im) {
double r982115 = 0.5;
double r982116 = 2.0;
double r982117 = re;
double r982118 = r982117 * r982117;
double r982119 = im;
double r982120 = r982119 * r982119;
double r982121 = r982118 + r982120;
double r982122 = sqrt(r982121);
double r982123 = r982122 - r982117;
double r982124 = r982116 * r982123;
double r982125 = sqrt(r982124);
double r982126 = r982115 * r982125;
return r982126;
}
double f(double re, double im) {
double r982127 = re;
double r982128 = -4.133795376408894e+79;
bool r982129 = r982127 <= r982128;
double r982130 = -2.0;
double r982131 = r982130 * r982127;
double r982132 = 2.0;
double r982133 = r982131 * r982132;
double r982134 = sqrt(r982133);
double r982135 = 0.5;
double r982136 = r982134 * r982135;
double r982137 = -4.2940560251989423e-308;
bool r982138 = r982127 <= r982137;
double r982139 = im;
double r982140 = r982139 * r982139;
double r982141 = r982127 * r982127;
double r982142 = r982140 + r982141;
double r982143 = sqrt(r982142);
double r982144 = sqrt(r982143);
double r982145 = cbrt(r982142);
double r982146 = fabs(r982145);
double r982147 = sqrt(r982146);
double r982148 = r982144 * r982147;
double r982149 = cbrt(r982145);
double r982150 = r982149 * r982149;
double r982151 = r982150 * r982149;
double r982152 = sqrt(r982151);
double r982153 = sqrt(r982152);
double r982154 = r982148 * r982153;
double r982155 = r982154 - r982127;
double r982156 = r982155 * r982132;
double r982157 = sqrt(r982156);
double r982158 = r982157 * r982135;
double r982159 = r982127 + r982143;
double r982160 = r982140 / r982159;
double r982161 = r982160 * r982132;
double r982162 = sqrt(r982161);
double r982163 = r982135 * r982162;
double r982164 = r982138 ? r982158 : r982163;
double r982165 = r982129 ? r982136 : r982164;
return r982165;
}



Bits error versus re



Bits error versus im
Results
if re < -4.133795376408894e+79Initial program 49.2
Taylor expanded around -inf 11.8
if -4.133795376408894e+79 < re < -4.2940560251989423e-308Initial program 21.4
rmApplied add-sqr-sqrt21.4
Applied sqrt-prod21.5
rmApplied add-cube-cbrt21.6
Applied sqrt-prod21.6
Applied sqrt-prod21.6
Applied associate-*r*21.6
Simplified21.6
rmApplied add-cube-cbrt21.6
if -4.2940560251989423e-308 < re Initial program 45.4
rmApplied add-sqr-sqrt45.4
Applied sqrt-prod46.1
rmApplied flip--46.0
Simplified35.3
Simplified35.2
Final simplification26.5
herbie shell --seed 2019169
(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)))))