0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -1.2671946284215746 \cdot 10^{83}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le -1.651091264846107 \cdot 10^{-119}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}\right)\\
\mathbf{elif}\;im \le -2.0514133168585066 \cdot 10^{-182}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;im \le -1.84433611703650748 \cdot 10^{-231}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le 1.45766144586139333 \cdot 10^{-304}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im \cdot \frac{im}{2 \cdot re}\right)}\\
\mathbf{elif}\;im \le 7.28289994053803203 \cdot 10^{-158}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;im \le 1.22568432920739315 \cdot 10^{73}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{im - re}\right)\\
\end{array}double code(double re, double im) {
return (0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re))));
}
double code(double re, double im) {
double temp;
if ((im <= -1.2671946284215746e+83)) {
temp = (0.5 * sqrt((2.0 * -(re + im))));
} else {
double temp_1;
if ((im <= -1.651091264846107e-119)) {
temp_1 = (0.5 * (sqrt(2.0) * sqrt((sqrt(((re * re) + (im * im))) - re))));
} else {
double temp_2;
if ((im <= -2.0514133168585066e-182)) {
temp_2 = (0.5 * sqrt((2.0 * ((-1.0 * re) - re))));
} else {
double temp_3;
if ((im <= -1.8443361170365075e-231)) {
temp_3 = (0.5 * sqrt((2.0 * -(re + im))));
} else {
double temp_4;
if ((im <= 1.4576614458613933e-304)) {
temp_4 = (0.5 * sqrt((2.0 * (im * (im / (2.0 * re))))));
} else {
double temp_5;
if ((im <= 7.282899940538032e-158)) {
temp_5 = (0.5 * sqrt((2.0 * ((-1.0 * re) - re))));
} else {
double temp_6;
if ((im <= 1.2256843292073932e+73)) {
temp_6 = (0.5 * (sqrt(2.0) * sqrt((sqrt(((re * re) + (im * im))) - re))));
} else {
temp_6 = (0.5 * (sqrt(2.0) * sqrt((im - re))));
}
temp_5 = temp_6;
}
temp_4 = temp_5;
}
temp_3 = temp_4;
}
temp_2 = temp_3;
}
temp_1 = temp_2;
}
temp = temp_1;
}
return temp;
}



Bits error versus re



Bits error versus im
Results
if im < -1.2671946284215746e+83 or -2.0514133168585066e-182 < im < -1.8443361170365075e-231Initial program 49.3
rmApplied flip--53.0
Simplified51.1
Taylor expanded around -inf 18.1
if -1.2671946284215746e+83 < im < -1.651091264846107e-119 or 7.282899940538032e-158 < im < 1.2256843292073932e+73Initial program 24.1
rmApplied sqrt-prod24.4
if -1.651091264846107e-119 < im < -2.0514133168585066e-182 or 1.4576614458613933e-304 < im < 7.282899940538032e-158Initial program 42.3
Taylor expanded around -inf 37.5
if -1.8443361170365075e-231 < im < 1.4576614458613933e-304Initial program 42.0
rmApplied flip--59.0
Simplified49.8
rmApplied *-un-lft-identity49.8
Applied add-sqr-sqrt63.1
Applied unpow-prod-down63.1
Applied times-frac63.1
Simplified63.1
Simplified49.2
Taylor expanded around inf 46.6
if 1.2256843292073932e+73 < im Initial program 48.3
rmApplied sqrt-prod48.4
Taylor expanded around 0 10.5
Final simplification24.1
herbie shell --seed 2020053
(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)))))