0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \leq -8.727844172951264 \cdot 10^{+118}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re \cdot -2\right)}\\
\mathbf{elif}\;re \leq -4.760511237683924 \cdot 10^{-146}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;re \leq 3.7260543194433134 \cdot 10^{-39} \lor \neg \left(re \leq 5.07518301516914 \cdot 10^{+76}\right):\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{re + \sqrt{re \cdot re + im \cdot im}}}\\
\end{array}(FPCore (re im) :precision binary64 (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))
(FPCore (re im)
:precision binary64
(if (<= re -8.727844172951264e+118)
(* 0.5 (sqrt (* 2.0 (* re -2.0))))
(if (<= re -4.760511237683924e-146)
(*
0.5
(sqrt
(*
2.0
(-
(*
(sqrt (sqrt (+ (* re re) (* im im))))
(sqrt (sqrt (+ (* re re) (* im im)))))
re))))
(if (or (<= re 3.7260543194433134e-39) (not (<= re 5.07518301516914e+76)))
(* 0.5 (sqrt (* 2.0 (- im re))))
(*
0.5
(sqrt (* 2.0 (/ (* im im) (+ re (sqrt (+ (* re re) (* im im))))))))))))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 tmp;
if (re <= -8.727844172951264e+118) {
tmp = 0.5 * sqrt(2.0 * (re * -2.0));
} else if (re <= -4.760511237683924e-146) {
tmp = 0.5 * sqrt(2.0 * ((sqrt(sqrt((re * re) + (im * im))) * sqrt(sqrt((re * re) + (im * im)))) - re));
} else if ((re <= 3.7260543194433134e-39) || !(re <= 5.07518301516914e+76)) {
tmp = 0.5 * sqrt(2.0 * (im - re));
} else {
tmp = 0.5 * sqrt(2.0 * ((im * im) / (re + sqrt((re * re) + (im * im)))));
}
return tmp;
}



Bits error versus re



Bits error versus im
Results
if re < -8.727844172951264e118Initial program 55.8
Taylor expanded around -inf 9.9
Simplified9.9
if -8.727844172951264e118 < re < -4.7605112376839243e-146Initial program 16.1
rmApplied add-sqr-sqrt_binary6416.1
Applied sqrt-prod_binary6416.2
if -4.7605112376839243e-146 < re < 3.7260543194433134e-39 or 5.07518301516913988e76 < re Initial program 41.6
Taylor expanded around 0 26.2
if 3.7260543194433134e-39 < re < 5.07518301516913988e76Initial program 47.1
rmApplied flip--_binary6447.1
Simplified29.7
Simplified29.7
Final simplification21.8
herbie shell --seed 2020220
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
:precision binary64
:pre (> im 0.0)
(* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))