\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 r2125538 = b;
double r2125539 = c;
double r2125540 = r2125538 * r2125539;
double r2125541 = a;
double r2125542 = d;
double r2125543 = r2125541 * r2125542;
double r2125544 = r2125540 - r2125543;
double r2125545 = r2125539 * r2125539;
double r2125546 = r2125542 * r2125542;
double r2125547 = r2125545 + r2125546;
double r2125548 = r2125544 / r2125547;
return r2125548;
}
double f(double a, double b, double c, double d) {
double r2125549 = b;
double r2125550 = c;
double r2125551 = r2125549 * r2125550;
double r2125552 = a;
double r2125553 = d;
double r2125554 = r2125552 * r2125553;
double r2125555 = r2125551 - r2125554;
double r2125556 = r2125550 * r2125550;
double r2125557 = r2125553 * r2125553;
double r2125558 = r2125556 + r2125557;
double r2125559 = sqrt(r2125558);
double r2125560 = r2125555 / r2125559;
double r2125561 = r2125560 / r2125559;
return r2125561;
}




Bits error versus a




Bits error versus b




Bits error versus c




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