\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}\frac{\frac{a \cdot c + b \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 r98513 = a;
double r98514 = c;
double r98515 = r98513 * r98514;
double r98516 = b;
double r98517 = d;
double r98518 = r98516 * r98517;
double r98519 = r98515 + r98518;
double r98520 = r98514 * r98514;
double r98521 = r98517 * r98517;
double r98522 = r98520 + r98521;
double r98523 = r98519 / r98522;
return r98523;
}
double f(double a, double b, double c, double d) {
double r98524 = a;
double r98525 = c;
double r98526 = r98524 * r98525;
double r98527 = b;
double r98528 = d;
double r98529 = r98527 * r98528;
double r98530 = r98526 + r98529;
double r98531 = r98525 * r98525;
double r98532 = r98528 * r98528;
double r98533 = r98531 + r98532;
double r98534 = sqrt(r98533);
double r98535 = r98530 / r98534;
double r98536 = r98535 / r98534;
return r98536;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.1 |
|---|---|
| Target | 0.4 |
| Herbie | 26.0 |
Initial program 26.1
rmApplied add-sqr-sqrt26.1
Applied associate-/r*26.0
Final simplification26.0
herbie shell --seed 2020100
(FPCore (a b c d)
:name "Complex division, real part"
:precision binary64
:herbie-target
(if (< (fabs d) (fabs c)) (/ (+ a (* b (/ d c))) (+ c (* d (/ d c)))) (/ (+ b (* a (/ c d))) (+ d (* c (/ c d)))))
(/ (+ (* a c) (* b d)) (+ (* c c) (* d d))))