0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -7.30492565369862761 \cdot 10^{-169}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im - 0}{-1 \cdot re + \sqrt{re \cdot re + im \cdot im}}}\\
\mathbf{elif}\;re \le -8.9396953920106285 \cdot 10^{-220}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\mathbf{elif}\;re \le 1.3380699708873314 \cdot 10^{-303}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im - 0}{-1 \cdot re + \sqrt{re \cdot re + im \cdot im}}}\\
\mathbf{elif}\;re \le 4.6928008739591648 \cdot 10^{-163}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\mathbf{elif}\;re \le 1.2114863434718439 \cdot 10^{120}:\\
\;\;\;\;0.5 \cdot \sqrt[3]{e^{\log \left({\left(\sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\right)}^{3}\right)}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot 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 VAR;
if ((re <= -7.304925653698628e-169)) {
VAR = (0.5 * sqrt((2.0 * (((im * im) - 0.0) / ((-1.0 * re) + sqrt(((re * re) + (im * im))))))));
} else {
double VAR_1;
if ((re <= -8.939695392010629e-220)) {
VAR_1 = (0.5 * sqrt((2.0 * (re + im))));
} else {
double VAR_2;
if ((re <= 1.3380699708873314e-303)) {
VAR_2 = (0.5 * sqrt((2.0 * (((im * im) - 0.0) / ((-1.0 * re) + sqrt(((re * re) + (im * im))))))));
} else {
double VAR_3;
if ((re <= 4.692800873959165e-163)) {
VAR_3 = (0.5 * sqrt((2.0 * (re + im))));
} else {
double VAR_4;
if ((re <= 1.2114863434718439e+120)) {
VAR_4 = (0.5 * cbrt(exp(log(pow(sqrt((2.0 * (sqrt(((re * re) + (im * im))) + re))), 3.0)))));
} else {
VAR_4 = (0.5 * sqrt((2.0 * (2.0 * re))));
}
VAR_3 = VAR_4;
}
VAR_2 = VAR_3;
}
VAR_1 = VAR_2;
}
VAR = VAR_1;
}
return VAR;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.7 |
|---|---|
| Target | 33.7 |
| Herbie | 27.9 |
if re < -7.304925653698628e-169 or -8.939695392010629e-220 < re < 1.3380699708873314e-303Initial program 46.7
rmApplied add-cube-cbrt48.0
rmApplied flip-+47.9
Simplified35.9
Simplified35.7
if -7.304925653698628e-169 < re < -8.939695392010629e-220 or 1.3380699708873314e-303 < re < 4.692800873959165e-163Initial program 29.7
Taylor expanded around 0 34.1
if 4.692800873959165e-163 < re < 1.2114863434718439e+120Initial program 17.2
rmApplied add-cbrt-cube17.6
Simplified17.6
rmApplied add-exp-log20.0
Applied pow-exp20.2
Simplified20.0
if 1.2114863434718439e+120 < re Initial program 55.7
Taylor expanded around inf 9.8
Final simplification27.9
herbie shell --seed 2020078
(FPCore (re im)
:name "math.sqrt on complex, real part"
:precision binary64
:herbie-target
(if (< re 0.0) (* 0.5 (* (sqrt 2) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))
(* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))