\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 r121671 = a;
double r121672 = c;
double r121673 = r121671 * r121672;
double r121674 = b;
double r121675 = d;
double r121676 = r121674 * r121675;
double r121677 = r121673 + r121676;
double r121678 = r121672 * r121672;
double r121679 = r121675 * r121675;
double r121680 = r121678 + r121679;
double r121681 = r121677 / r121680;
return r121681;
}
double f(double a, double b, double c, double d) {
double r121682 = a;
double r121683 = c;
double r121684 = r121682 * r121683;
double r121685 = b;
double r121686 = d;
double r121687 = r121685 * r121686;
double r121688 = r121684 + r121687;
double r121689 = r121683 * r121683;
double r121690 = r121686 * r121686;
double r121691 = r121689 + r121690;
double r121692 = sqrt(r121691);
double r121693 = r121688 / r121692;
double r121694 = r121693 / r121692;
return r121694;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.3 |
|---|---|
| Target | 0.4 |
| Herbie | 26.3 |
Initial program 26.3
rmApplied add-sqr-sqrt26.3
Applied associate-/r*26.3
Final simplification26.3
herbie shell --seed 2020060
(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))))