\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -4.82289647433212 \cdot 10^{+153}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 3.289226058156428 \cdot 10^{-70}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)} - b}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r1459853 = b;
double r1459854 = -r1459853;
double r1459855 = r1459853 * r1459853;
double r1459856 = 4.0;
double r1459857 = a;
double r1459858 = r1459856 * r1459857;
double r1459859 = c;
double r1459860 = r1459858 * r1459859;
double r1459861 = r1459855 - r1459860;
double r1459862 = sqrt(r1459861);
double r1459863 = r1459854 + r1459862;
double r1459864 = 2.0;
double r1459865 = r1459864 * r1459857;
double r1459866 = r1459863 / r1459865;
return r1459866;
}
double f(double a, double b, double c) {
double r1459867 = b;
double r1459868 = -4.82289647433212e+153;
bool r1459869 = r1459867 <= r1459868;
double r1459870 = c;
double r1459871 = r1459870 / r1459867;
double r1459872 = a;
double r1459873 = r1459867 / r1459872;
double r1459874 = r1459871 - r1459873;
double r1459875 = 2.0;
double r1459876 = r1459874 * r1459875;
double r1459877 = r1459876 / r1459875;
double r1459878 = 3.289226058156428e-70;
bool r1459879 = r1459867 <= r1459878;
double r1459880 = -4.0;
double r1459881 = r1459872 * r1459880;
double r1459882 = r1459881 * r1459870;
double r1459883 = fma(r1459867, r1459867, r1459882);
double r1459884 = sqrt(r1459883);
double r1459885 = r1459884 - r1459867;
double r1459886 = r1459885 / r1459872;
double r1459887 = r1459886 / r1459875;
double r1459888 = -2.0;
double r1459889 = r1459888 * r1459871;
double r1459890 = r1459889 / r1459875;
double r1459891 = r1459879 ? r1459887 : r1459890;
double r1459892 = r1459869 ? r1459877 : r1459891;
return r1459892;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.7 |
| Herbie | 10.0 |
if b < -4.82289647433212e+153Initial program 60.9
Simplified60.9
rmApplied div-inv60.9
rmApplied un-div-inv60.9
Taylor expanded around -inf 2.3
Simplified2.3
if -4.82289647433212e+153 < b < 3.289226058156428e-70Initial program 12.4
Simplified12.4
rmApplied div-inv12.6
rmApplied un-div-inv12.4
if 3.289226058156428e-70 < b Initial program 52.2
Simplified52.2
rmApplied div-inv52.2
Taylor expanded around inf 9.1
Final simplification10.0
herbie shell --seed 2019142 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))