\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\frac{1}{\sqrt{c \cdot c + d \cdot d}} \cdot \frac{b \cdot c - a \cdot d}{\sqrt{c \cdot c + d \cdot d}}double f(double a, double b, double c, double d) {
double r4281200 = b;
double r4281201 = c;
double r4281202 = r4281200 * r4281201;
double r4281203 = a;
double r4281204 = d;
double r4281205 = r4281203 * r4281204;
double r4281206 = r4281202 - r4281205;
double r4281207 = r4281201 * r4281201;
double r4281208 = r4281204 * r4281204;
double r4281209 = r4281207 + r4281208;
double r4281210 = r4281206 / r4281209;
return r4281210;
}
double f(double a, double b, double c, double d) {
double r4281211 = 1.0;
double r4281212 = c;
double r4281213 = r4281212 * r4281212;
double r4281214 = d;
double r4281215 = r4281214 * r4281214;
double r4281216 = r4281213 + r4281215;
double r4281217 = sqrt(r4281216);
double r4281218 = r4281211 / r4281217;
double r4281219 = b;
double r4281220 = r4281219 * r4281212;
double r4281221 = a;
double r4281222 = r4281221 * r4281214;
double r4281223 = r4281220 - r4281222;
double r4281224 = r4281223 / r4281217;
double r4281225 = r4281218 * r4281224;
return r4281225;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.1 |
|---|---|
| Target | 0.5 |
| Herbie | 26.1 |
Initial program 26.1
rmApplied add-sqr-sqrt26.1
Applied *-un-lft-identity26.1
Applied times-frac26.1
Final simplification26.1
herbie shell --seed 2019146
(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))))