\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}\frac{\frac{b \cdot d + a \cdot c}{\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 r2477288 = a;
double r2477289 = c;
double r2477290 = r2477288 * r2477289;
double r2477291 = b;
double r2477292 = d;
double r2477293 = r2477291 * r2477292;
double r2477294 = r2477290 + r2477293;
double r2477295 = r2477289 * r2477289;
double r2477296 = r2477292 * r2477292;
double r2477297 = r2477295 + r2477296;
double r2477298 = r2477294 / r2477297;
return r2477298;
}
double f(double a, double b, double c, double d) {
double r2477299 = b;
double r2477300 = d;
double r2477301 = r2477299 * r2477300;
double r2477302 = a;
double r2477303 = c;
double r2477304 = r2477302 * r2477303;
double r2477305 = r2477301 + r2477304;
double r2477306 = r2477303 * r2477303;
double r2477307 = r2477300 * r2477300;
double r2477308 = r2477306 + r2477307;
double r2477309 = sqrt(r2477308);
double r2477310 = r2477305 / r2477309;
double r2477311 = r2477310 / r2477309;
return r2477311;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 25.6 |
|---|---|
| Target | 0.4 |
| Herbie | 25.6 |
Initial program 25.6
rmApplied add-sqr-sqrt25.6
Applied associate-/r*25.6
Final simplification25.6
herbie shell --seed 2019156
(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))))