\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}\frac{b \cdot d + a \cdot c}{c \cdot c + d \cdot d}double f(double a, double b, double c, double d) {
double r4151088 = a;
double r4151089 = c;
double r4151090 = r4151088 * r4151089;
double r4151091 = b;
double r4151092 = d;
double r4151093 = r4151091 * r4151092;
double r4151094 = r4151090 + r4151093;
double r4151095 = r4151089 * r4151089;
double r4151096 = r4151092 * r4151092;
double r4151097 = r4151095 + r4151096;
double r4151098 = r4151094 / r4151097;
return r4151098;
}
double f(double a, double b, double c, double d) {
double r4151099 = b;
double r4151100 = d;
double r4151101 = r4151099 * r4151100;
double r4151102 = a;
double r4151103 = c;
double r4151104 = r4151102 * r4151103;
double r4151105 = r4151101 + r4151104;
double r4151106 = r4151103 * r4151103;
double r4151107 = r4151100 * r4151100;
double r4151108 = r4151106 + r4151107;
double r4151109 = r4151105 / r4151108;
return r4151109;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 25.9 |
|---|---|
| Target | 0.4 |
| Herbie | 25.9 |
Initial program 25.9
Final simplification25.9
herbie shell --seed 2019129
(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))))