\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\frac{\left(b \cdot c - a \cdot d\right) \cdot \frac{1}{\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 r91818 = b;
double r91819 = c;
double r91820 = r91818 * r91819;
double r91821 = a;
double r91822 = d;
double r91823 = r91821 * r91822;
double r91824 = r91820 - r91823;
double r91825 = r91819 * r91819;
double r91826 = r91822 * r91822;
double r91827 = r91825 + r91826;
double r91828 = r91824 / r91827;
return r91828;
}
double f(double a, double b, double c, double d) {
double r91829 = b;
double r91830 = c;
double r91831 = r91829 * r91830;
double r91832 = a;
double r91833 = d;
double r91834 = r91832 * r91833;
double r91835 = r91831 - r91834;
double r91836 = 1.0;
double r91837 = r91830 * r91830;
double r91838 = r91833 * r91833;
double r91839 = r91837 + r91838;
double r91840 = sqrt(r91839);
double r91841 = r91836 / r91840;
double r91842 = r91835 * r91841;
double r91843 = r91842 / r91840;
return r91843;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.2 |
|---|---|
| Target | 0.5 |
| Herbie | 26.2 |
Initial program 26.2
rmApplied add-sqr-sqrt26.2
Applied associate-/r*26.2
rmApplied div-inv26.2
Final simplification26.2
herbie shell --seed 2020021
(FPCore (a b c d)
:name "Complex division, imag part"
:precision binary64
: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))))