\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 r4173148 = a;
double r4173149 = c;
double r4173150 = r4173148 * r4173149;
double r4173151 = b;
double r4173152 = d;
double r4173153 = r4173151 * r4173152;
double r4173154 = r4173150 + r4173153;
double r4173155 = r4173149 * r4173149;
double r4173156 = r4173152 * r4173152;
double r4173157 = r4173155 + r4173156;
double r4173158 = r4173154 / r4173157;
return r4173158;
}
double f(double a, double b, double c, double d) {
double r4173159 = b;
double r4173160 = d;
double r4173161 = r4173159 * r4173160;
double r4173162 = a;
double r4173163 = c;
double r4173164 = r4173162 * r4173163;
double r4173165 = r4173161 + r4173164;
double r4173166 = r4173163 * r4173163;
double r4173167 = r4173160 * r4173160;
double r4173168 = r4173166 + r4173167;
double r4173169 = r4173165 / r4173168;
return r4173169;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.2 |
|---|---|
| Target | 0.4 |
| Herbie | 26.2 |
Initial program 26.2
Final simplification26.2
herbie shell --seed 2019146
(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))))