\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}\frac{\frac{b \cdot d + a \cdot c}{\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 r4987385 = a;
double r4987386 = c;
double r4987387 = r4987385 * r4987386;
double r4987388 = b;
double r4987389 = d;
double r4987390 = r4987388 * r4987389;
double r4987391 = r4987387 + r4987390;
double r4987392 = r4987386 * r4987386;
double r4987393 = r4987389 * r4987389;
double r4987394 = r4987392 + r4987393;
double r4987395 = r4987391 / r4987394;
return r4987395;
}
double f(double a, double b, double c, double d) {
double r4987396 = b;
double r4987397 = d;
double r4987398 = r4987396 * r4987397;
double r4987399 = a;
double r4987400 = c;
double r4987401 = r4987399 * r4987400;
double r4987402 = r4987398 + r4987401;
double r4987403 = r4987400 * r4987400;
double r4987404 = r4987397 * r4987397;
double r4987405 = r4987403 + r4987404;
double r4987406 = sqrt(r4987405);
double r4987407 = r4987402 / r4987406;
double r4987408 = r4987407 / r4987406;
return r4987408;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 25.8 |
|---|---|
| Target | 0.4 |
| Herbie | 25.7 |
Initial program 25.8
rmApplied add-sqr-sqrt25.8
Applied associate-/r*25.7
Final simplification25.7
herbie shell --seed 2019163
(FPCore (a b c d)
:name "Complex division, real part"
:herbie-target
(if (< (fabs d) (fabs c)) (/ (+ a (* b (/ d c))) (+ c (* d (/ d c)))) (/ (+ b (* a (/ c d))) (+ d (* c (/ c d)))))
(/ (+ (* a c) (* b d)) (+ (* c c) (* d d))))