\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}\frac{\frac{a \cdot c + b \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 r112527 = a;
double r112528 = c;
double r112529 = r112527 * r112528;
double r112530 = b;
double r112531 = d;
double r112532 = r112530 * r112531;
double r112533 = r112529 + r112532;
double r112534 = r112528 * r112528;
double r112535 = r112531 * r112531;
double r112536 = r112534 + r112535;
double r112537 = r112533 / r112536;
return r112537;
}
double f(double a, double b, double c, double d) {
double r112538 = a;
double r112539 = c;
double r112540 = r112538 * r112539;
double r112541 = b;
double r112542 = d;
double r112543 = r112541 * r112542;
double r112544 = r112540 + r112543;
double r112545 = r112539 * r112539;
double r112546 = r112542 * r112542;
double r112547 = r112545 + r112546;
double r112548 = sqrt(r112547);
double r112549 = r112544 / r112548;
double r112550 = r112549 / r112548;
return r112550;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.4 |
|---|---|
| Target | 0.5 |
| Herbie | 26.4 |
Initial program 26.4
rmApplied add-sqr-sqrt26.4
Applied associate-/r*26.4
Final simplification26.4
herbie shell --seed 2020065
(FPCore (a b c d)
:name "Complex division, real part"
:precision binary64
: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))))