\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 r7693821 = b;
double r7693822 = c;
double r7693823 = r7693821 * r7693822;
double r7693824 = a;
double r7693825 = d;
double r7693826 = r7693824 * r7693825;
double r7693827 = r7693823 - r7693826;
double r7693828 = r7693822 * r7693822;
double r7693829 = r7693825 * r7693825;
double r7693830 = r7693828 + r7693829;
double r7693831 = r7693827 / r7693830;
return r7693831;
}
double f(double a, double b, double c, double d) {
double r7693832 = b;
double r7693833 = c;
double r7693834 = r7693832 * r7693833;
double r7693835 = a;
double r7693836 = d;
double r7693837 = r7693835 * r7693836;
double r7693838 = r7693834 - r7693837;
double r7693839 = r7693833 * r7693833;
double r7693840 = r7693836 * r7693836;
double r7693841 = r7693839 + r7693840;
double r7693842 = sqrt(r7693841);
double r7693843 = r7693838 / r7693842;
double r7693844 = r7693843 / r7693842;
return r7693844;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 27.0 |
|---|---|
| Target | 0.4 |
| Herbie | 26.9 |
Initial program 27.0
rmApplied add-sqr-sqrt27.0
Applied associate-/r*26.9
Final simplification26.9
herbie shell --seed 2019171 +o rules:numerics
(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))))