\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}double f(double a, double b, double c, double d) {
double r82014 = a;
double r82015 = c;
double r82016 = r82014 * r82015;
double r82017 = b;
double r82018 = d;
double r82019 = r82017 * r82018;
double r82020 = r82016 + r82019;
double r82021 = r82015 * r82015;
double r82022 = r82018 * r82018;
double r82023 = r82021 + r82022;
double r82024 = r82020 / r82023;
return r82024;
}
double f(double a, double b, double c, double d) {
double r82025 = a;
double r82026 = c;
double r82027 = r82025 * r82026;
double r82028 = b;
double r82029 = d;
double r82030 = r82028 * r82029;
double r82031 = r82027 + r82030;
double r82032 = r82026 * r82026;
double r82033 = r82029 * r82029;
double r82034 = r82032 + r82033;
double r82035 = r82031 / r82034;
return r82035;
}




Bits error versus a




Bits error versus b




Bits error versus c




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