\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 r123859 = a;
double r123860 = c;
double r123861 = r123859 * r123860;
double r123862 = b;
double r123863 = d;
double r123864 = r123862 * r123863;
double r123865 = r123861 + r123864;
double r123866 = r123860 * r123860;
double r123867 = r123863 * r123863;
double r123868 = r123866 + r123867;
double r123869 = r123865 / r123868;
return r123869;
}
double f(double a, double b, double c, double d) {
double r123870 = a;
double r123871 = c;
double r123872 = r123870 * r123871;
double r123873 = b;
double r123874 = d;
double r123875 = r123873 * r123874;
double r123876 = r123872 + r123875;
double r123877 = r123871 * r123871;
double r123878 = r123874 * r123874;
double r123879 = r123877 + r123878;
double r123880 = sqrt(r123879);
double r123881 = r123876 / r123880;
double r123882 = r123881 / r123880;
return r123882;
}




Bits error versus a




Bits error versus b




Bits error versus c




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