double code(double re, double im) {
return ((double) (0.5 * ((double) sqrt(((double) (2.0 * ((double) (((double) sqrt(((double) (((double) (re * re)) + ((double) (im * im)))))) + re))))))));
}
double code(double re, double im) {
double VAR;
if ((re <= -3.4246941374715e-310)) {
VAR = ((double) (0.5 * ((double) (((double) sqrt(((double) (((double) (im * im)) * 2.0)))) / ((double) sqrt(((double) (((double) sqrt(((double) (((double) (im * im)) + ((double) (re * re)))))) - re))))))));
} else {
double VAR_1;
if ((re <= 1.1095515437686829e+75)) {
VAR_1 = ((double) (0.5 * ((double) sqrt(((double) (2.0 * ((double) (re + ((double) sqrt(((double) (((double) (im * im)) + ((double) (re * re))))))))))))));
} else {
VAR_1 = ((double) (0.5 * ((double) sqrt(((double) (2.0 * ((double) (re + re))))))));
}
VAR = VAR_1;
}
return VAR;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.9 |
|---|---|
| Target | 34.0 |
| Herbie | 26.5 |
if re < -3.424694137471509e-310Initial program 45.9
rmApplied flip-+45.7
Applied associate-*r/45.7
Applied sqrt-div45.8
Simplified35.2
if -3.424694137471509e-310 < re < 1.10955154376868287e75Initial program 22.4
if 1.10955154376868287e75 < re Initial program 46.5
Taylor expanded around inf 10.7
Final simplification26.5
herbie shell --seed 2020180
(FPCore (re im)
:name "math.sqrt on complex, real part"
:precision binary64
:herbie-target
(if (< re 0.0) (* 0.5 (* (sqrt 2.0) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))
(* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))