\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\frac{b \cdot c}{c \cdot c + d \cdot d} - \frac{a}{\frac{c \cdot c + d \cdot d}{d}}double f(double a, double b, double c, double d) {
double r28103567 = b;
double r28103568 = c;
double r28103569 = r28103567 * r28103568;
double r28103570 = a;
double r28103571 = d;
double r28103572 = r28103570 * r28103571;
double r28103573 = r28103569 - r28103572;
double r28103574 = r28103568 * r28103568;
double r28103575 = r28103571 * r28103571;
double r28103576 = r28103574 + r28103575;
double r28103577 = r28103573 / r28103576;
return r28103577;
}
double f(double a, double b, double c, double d) {
double r28103578 = b;
double r28103579 = c;
double r28103580 = r28103578 * r28103579;
double r28103581 = r28103579 * r28103579;
double r28103582 = d;
double r28103583 = r28103582 * r28103582;
double r28103584 = r28103581 + r28103583;
double r28103585 = r28103580 / r28103584;
double r28103586 = a;
double r28103587 = r28103584 / r28103582;
double r28103588 = r28103586 / r28103587;
double r28103589 = r28103585 - r28103588;
return r28103589;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.0 |
|---|---|
| Target | 0.4 |
| Herbie | 24.5 |
Initial program 26.0
rmApplied div-sub26.0
rmApplied associate-/l*24.5
Final simplification24.5
herbie shell --seed 2019128
(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))))