\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}\frac{\frac{1}{\frac{\sqrt{c \cdot c + d \cdot d}}{d \cdot b + c \cdot a}}}{\sqrt{c \cdot c + d \cdot d}}double f(double a, double b, double c, double d) {
double r2894664 = a;
double r2894665 = c;
double r2894666 = r2894664 * r2894665;
double r2894667 = b;
double r2894668 = d;
double r2894669 = r2894667 * r2894668;
double r2894670 = r2894666 + r2894669;
double r2894671 = r2894665 * r2894665;
double r2894672 = r2894668 * r2894668;
double r2894673 = r2894671 + r2894672;
double r2894674 = r2894670 / r2894673;
return r2894674;
}
double f(double a, double b, double c, double d) {
double r2894675 = 1.0;
double r2894676 = c;
double r2894677 = r2894676 * r2894676;
double r2894678 = d;
double r2894679 = r2894678 * r2894678;
double r2894680 = r2894677 + r2894679;
double r2894681 = sqrt(r2894680);
double r2894682 = b;
double r2894683 = r2894678 * r2894682;
double r2894684 = a;
double r2894685 = r2894676 * r2894684;
double r2894686 = r2894683 + r2894685;
double r2894687 = r2894681 / r2894686;
double r2894688 = r2894675 / r2894687;
double r2894689 = r2894688 / r2894681;
return r2894689;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 25.7 |
|---|---|
| Target | 0.4 |
| Herbie | 25.7 |
Initial program 25.7
rmApplied add-sqr-sqrt25.7
Applied associate-/r*25.7
rmApplied clear-num25.7
Final simplification25.7
herbie shell --seed 2019130
(FPCore (a b c d)
:name "Complex division, real part"
: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))))