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 <= -2.5723644386022114e-302)) {
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 <= 2.7348232889716076e-169)) {
VAR_1 = ((double) (0.5 * ((double) sqrt(((double) (2.0 * ((double) (re + im))))))));
} else {
double VAR_2;
if ((re <= 5.1160026767062117e-144)) {
VAR_2 = ((double) (0.5 * ((double) sqrt(((double) (2.0 * ((double) (((double) sqrt(((double) (re + ((double) sqrt(((double) (((double) (im * im)) + ((double) (re * re)))))))))) * ((double) sqrt(((double) (re + ((double) sqrt(((double) (((double) (im * im)) + ((double) (re * re))))))))))))))))));
} else {
double VAR_3;
if ((re <= 4.7357972410850955e-105)) {
VAR_3 = ((double) (0.5 * ((double) sqrt(((double) (2.0 * ((double) (re + im))))))));
} else {
double VAR_4;
if ((re <= 9.207225632419575e+119)) {
VAR_4 = ((double) (0.5 * ((double) sqrt(((double) (2.0 * ((double) (re + ((double) sqrt(((double) (((double) (im * im)) + ((double) (re * re))))))))))))));
} else {
VAR_4 = ((double) (0.5 * ((double) sqrt(((double) (2.0 * ((double) (re + 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.2 |
|---|---|
| Target | 33.3 |
| Herbie | 27.1 |
if re < -2.5723644386022114e-302Initial program 45.3
rmApplied flip-+45.2
Applied associate-*r/45.2
Applied sqrt-div45.3
Simplified34.5
if -2.5723644386022114e-302 < re < 2.73482328897160755e-169 or 5.11600267670621171e-144 < re < 4.73579724108509554e-105Initial program 26.1
Taylor expanded around 0 35.2
if 2.73482328897160755e-169 < re < 5.11600267670621171e-144Initial program 20.3
rmApplied add-sqr-sqrt20.5
Simplified20.5
Simplified20.5
if 4.73579724108509554e-105 < re < 9.20722563241957548e119Initial program 15.6
if 9.20722563241957548e119 < re Initial program 55.2
Taylor expanded around inf 10.2
Final simplification27.1
herbie shell --seed 2020181
(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)))))