\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 -2.3044033969831823 \cdot 10^{153}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 3.2001964328628576 \cdot 10^{-306}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.2561019611397527 \cdot 10^{141}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r162895 = b;
double r162896 = -r162895;
double r162897 = r162895 * r162895;
double r162898 = 4.0;
double r162899 = a;
double r162900 = r162898 * r162899;
double r162901 = c;
double r162902 = r162900 * r162901;
double r162903 = r162897 - r162902;
double r162904 = sqrt(r162903);
double r162905 = r162896 + r162904;
double r162906 = 2.0;
double r162907 = r162906 * r162899;
double r162908 = r162905 / r162907;
return r162908;
}
double f(double a, double b, double c) {
double r162909 = b;
double r162910 = -2.3044033969831823e+153;
bool r162911 = r162909 <= r162910;
double r162912 = 1.0;
double r162913 = c;
double r162914 = r162913 / r162909;
double r162915 = a;
double r162916 = r162909 / r162915;
double r162917 = r162914 - r162916;
double r162918 = r162912 * r162917;
double r162919 = 3.2001964328628576e-306;
bool r162920 = r162909 <= r162919;
double r162921 = -r162909;
double r162922 = r162909 * r162909;
double r162923 = 4.0;
double r162924 = r162923 * r162915;
double r162925 = r162924 * r162913;
double r162926 = r162922 - r162925;
double r162927 = sqrt(r162926);
double r162928 = r162921 + r162927;
double r162929 = 2.0;
double r162930 = r162929 * r162915;
double r162931 = r162928 / r162930;
double r162932 = 3.256101961139753e+141;
bool r162933 = r162909 <= r162932;
double r162934 = r162929 * r162913;
double r162935 = r162921 - r162927;
double r162936 = r162934 / r162935;
double r162937 = -1.0;
double r162938 = r162937 * r162914;
double r162939 = r162933 ? r162936 : r162938;
double r162940 = r162920 ? r162931 : r162939;
double r162941 = r162911 ? r162918 : r162940;
return r162941;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.7 |
| Herbie | 6.5 |
if b < -2.3044033969831823e+153Initial program 63.5
Taylor expanded around -inf 2.0
Simplified2.0
if -2.3044033969831823e+153 < b < 3.2001964328628576e-306Initial program 8.9
if 3.2001964328628576e-306 < b < 3.256101961139753e+141Initial program 34.3
rmApplied clear-num34.4
rmApplied flip-+34.4
Applied associate-/r/34.4
Applied associate-/r*34.5
Simplified15.0
Taylor expanded around 0 8.3
if 3.256101961139753e+141 < b Initial program 62.5
Taylor expanded around inf 1.5
Final simplification6.5
herbie shell --seed 2020060
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.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)))