\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 r137903 = b;
double r137904 = -r137903;
double r137905 = r137903 * r137903;
double r137906 = 4.0;
double r137907 = a;
double r137908 = r137906 * r137907;
double r137909 = c;
double r137910 = r137908 * r137909;
double r137911 = r137905 - r137910;
double r137912 = sqrt(r137911);
double r137913 = r137904 + r137912;
double r137914 = 2.0;
double r137915 = r137914 * r137907;
double r137916 = r137913 / r137915;
return r137916;
}
double f(double a, double b, double c) {
double r137917 = b;
double r137918 = -2.3044033969831823e+153;
bool r137919 = r137917 <= r137918;
double r137920 = 1.0;
double r137921 = c;
double r137922 = r137921 / r137917;
double r137923 = a;
double r137924 = r137917 / r137923;
double r137925 = r137922 - r137924;
double r137926 = r137920 * r137925;
double r137927 = 3.2001964328628576e-306;
bool r137928 = r137917 <= r137927;
double r137929 = -r137917;
double r137930 = r137917 * r137917;
double r137931 = 4.0;
double r137932 = r137931 * r137923;
double r137933 = r137932 * r137921;
double r137934 = r137930 - r137933;
double r137935 = sqrt(r137934);
double r137936 = r137929 + r137935;
double r137937 = 2.0;
double r137938 = r137937 * r137923;
double r137939 = r137936 / r137938;
double r137940 = 3.256101961139753e+141;
bool r137941 = r137917 <= r137940;
double r137942 = r137937 * r137921;
double r137943 = r137929 - r137935;
double r137944 = r137942 / r137943;
double r137945 = -1.0;
double r137946 = r137945 * r137922;
double r137947 = r137941 ? r137944 : r137946;
double r137948 = r137928 ? r137939 : r137947;
double r137949 = r137919 ? r137926 : r137948;
return r137949;
}




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)))