\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 r88832 = a;
double r88833 = c;
double r88834 = r88832 * r88833;
double r88835 = b;
double r88836 = d;
double r88837 = r88835 * r88836;
double r88838 = r88834 + r88837;
double r88839 = r88833 * r88833;
double r88840 = r88836 * r88836;
double r88841 = r88839 + r88840;
double r88842 = r88838 / r88841;
return r88842;
}
double f(double a, double b, double c, double d) {
double r88843 = 1.0;
double r88844 = c;
double r88845 = r88844 * r88844;
double r88846 = d;
double r88847 = r88846 * r88846;
double r88848 = r88845 + r88847;
double r88849 = sqrt(r88848);
double r88850 = b;
double r88851 = r88846 * r88850;
double r88852 = a;
double r88853 = r88844 * r88852;
double r88854 = r88851 + r88853;
double r88855 = r88849 / r88854;
double r88856 = r88843 / r88855;
double r88857 = r88856 / r88849;
return r88857;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 25.8 |
|---|---|
| Target | 0.4 |
| Herbie | 25.8 |
Initial program 25.8
Simplified25.8
rmApplied add-sqr-sqrt25.8
Applied associate-/r*25.7
Simplified25.7
rmApplied clear-num25.8
Final simplification25.8
herbie shell --seed 2019194
(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))))