\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\frac{\frac{b \cdot c - a \cdot d}{\sqrt{c \cdot c + d \cdot d}}}{\sqrt{c \cdot c + d \cdot d}}double f(double a, double b, double c, double d) {
double r5174291 = b;
double r5174292 = c;
double r5174293 = r5174291 * r5174292;
double r5174294 = a;
double r5174295 = d;
double r5174296 = r5174294 * r5174295;
double r5174297 = r5174293 - r5174296;
double r5174298 = r5174292 * r5174292;
double r5174299 = r5174295 * r5174295;
double r5174300 = r5174298 + r5174299;
double r5174301 = r5174297 / r5174300;
return r5174301;
}
double f(double a, double b, double c, double d) {
double r5174302 = b;
double r5174303 = c;
double r5174304 = r5174302 * r5174303;
double r5174305 = a;
double r5174306 = d;
double r5174307 = r5174305 * r5174306;
double r5174308 = r5174304 - r5174307;
double r5174309 = r5174303 * r5174303;
double r5174310 = r5174306 * r5174306;
double r5174311 = r5174309 + r5174310;
double r5174312 = sqrt(r5174311);
double r5174313 = r5174308 / r5174312;
double r5174314 = r5174313 / r5174312;
return r5174314;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.1 |
|---|---|
| Target | 0.4 |
| Herbie | 26.0 |
Initial program 26.1
rmApplied add-sqr-sqrt26.1
Applied associate-/r*26.0
Final simplification26.0
herbie shell --seed 2019163
(FPCore (a b c d)
:name "Complex division, imag part"
:herbie-target
(if (< (fabs d) (fabs c)) (/ (- b (* a (/ d c))) (+ c (* d (/ d c)))) (/ (+ (- a) (* b (/ c d))) (+ d (* c (/ c d)))))
(/ (- (* b c) (* a d)) (+ (* c c) (* d d))))