\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\frac{\frac{b \cdot c - a \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 r4258295 = b;
double r4258296 = c;
double r4258297 = r4258295 * r4258296;
double r4258298 = a;
double r4258299 = d;
double r4258300 = r4258298 * r4258299;
double r4258301 = r4258297 - r4258300;
double r4258302 = r4258296 * r4258296;
double r4258303 = r4258299 * r4258299;
double r4258304 = r4258302 + r4258303;
double r4258305 = r4258301 / r4258304;
return r4258305;
}
double f(double a, double b, double c, double d) {
double r4258306 = b;
double r4258307 = c;
double r4258308 = r4258306 * r4258307;
double r4258309 = a;
double r4258310 = d;
double r4258311 = r4258309 * r4258310;
double r4258312 = r4258308 - r4258311;
double r4258313 = r4258307 * r4258307;
double r4258314 = r4258310 * r4258310;
double r4258315 = r4258313 + r4258314;
double r4258316 = sqrt(r4258315);
double r4258317 = r4258312 / r4258316;
double r4258318 = r4258317 / r4258316;
return r4258318;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 25.4 |
|---|---|
| Target | 0.5 |
| Herbie | 25.3 |
Initial program 25.4
rmApplied add-sqr-sqrt25.4
Applied associate-/r*25.3
Final simplification25.3
herbie shell --seed 2019134
(FPCore (a b c d)
:name "Complex division, imag part"
:herbie-target
(if (< (fabs d) (fabs c)) (/ (- b (* a (/ d c))) (+ c (* d (/ d c)))) (/ (+ (- a) (* b (/ c d))) (+ d (* c (/ c d)))))
(/ (- (* b c) (* a d)) (+ (* c c) (* d d))))