\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 r98625 = b;
double r98626 = c;
double r98627 = r98625 * r98626;
double r98628 = a;
double r98629 = d;
double r98630 = r98628 * r98629;
double r98631 = r98627 - r98630;
double r98632 = r98626 * r98626;
double r98633 = r98629 * r98629;
double r98634 = r98632 + r98633;
double r98635 = r98631 / r98634;
return r98635;
}
double f(double a, double b, double c, double d) {
double r98636 = b;
double r98637 = c;
double r98638 = r98636 * r98637;
double r98639 = a;
double r98640 = d;
double r98641 = r98639 * r98640;
double r98642 = r98638 - r98641;
double r98643 = r98637 * r98637;
double r98644 = r98640 * r98640;
double r98645 = r98643 + r98644;
double r98646 = sqrt(r98645);
double r98647 = r98642 / r98646;
double r98648 = r98647 / r98646;
return r98648;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 25.9 |
|---|---|
| Target | 0.5 |
| Herbie | 25.9 |
Initial program 25.9
rmApplied add-sqr-sqrt25.9
Applied associate-/r*25.9
Final simplification25.9
herbie shell --seed 2019208
(FPCore (a b c d)
:name "Complex division, imag part"
:precision binary64
: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))))