\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 r119740 = a;
double r119741 = c;
double r119742 = r119740 * r119741;
double r119743 = b;
double r119744 = d;
double r119745 = r119743 * r119744;
double r119746 = r119742 + r119745;
double r119747 = r119741 * r119741;
double r119748 = r119744 * r119744;
double r119749 = r119747 + r119748;
double r119750 = r119746 / r119749;
return r119750;
}
double f(double a, double b, double c, double d) {
double r119751 = a;
double r119752 = c;
double r119753 = r119751 * r119752;
double r119754 = b;
double r119755 = d;
double r119756 = r119754 * r119755;
double r119757 = r119753 + r119756;
double r119758 = r119752 * r119752;
double r119759 = r119755 * r119755;
double r119760 = r119758 + r119759;
double r119761 = sqrt(r119760);
double r119762 = r119757 / r119761;
double r119763 = r119762 / r119761;
return r119763;
}




Bits error versus a




Bits error versus b




Bits error versus c




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