\frac{\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}{2.0 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -3.234164035284793 \cdot 10^{+22}:\\
\;\;\;\;-1.0 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -2.4242286502051438 \cdot 10^{-135}:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - b \cdot b\right) + 4.0 \cdot \left(c \cdot a\right)}{\sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)} - b}}{2.0 \cdot a}\\
\mathbf{elif}\;b \le 1.7205132563858266 \cdot 10^{+103}:\\
\;\;\;\;\frac{1}{2.0 \cdot a} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1.0\\
\end{array}double f(double a, double b, double c) {
double r3852887 = b;
double r3852888 = -r3852887;
double r3852889 = r3852887 * r3852887;
double r3852890 = 4.0;
double r3852891 = a;
double r3852892 = c;
double r3852893 = r3852891 * r3852892;
double r3852894 = r3852890 * r3852893;
double r3852895 = r3852889 - r3852894;
double r3852896 = sqrt(r3852895);
double r3852897 = r3852888 - r3852896;
double r3852898 = 2.0;
double r3852899 = r3852898 * r3852891;
double r3852900 = r3852897 / r3852899;
return r3852900;
}
double f(double a, double b, double c) {
double r3852901 = b;
double r3852902 = -3.234164035284793e+22;
bool r3852903 = r3852901 <= r3852902;
double r3852904 = -1.0;
double r3852905 = c;
double r3852906 = r3852905 / r3852901;
double r3852907 = r3852904 * r3852906;
double r3852908 = -2.4242286502051438e-135;
bool r3852909 = r3852901 <= r3852908;
double r3852910 = r3852901 * r3852901;
double r3852911 = r3852910 - r3852910;
double r3852912 = 4.0;
double r3852913 = a;
double r3852914 = r3852905 * r3852913;
double r3852915 = r3852912 * r3852914;
double r3852916 = r3852911 + r3852915;
double r3852917 = r3852910 - r3852915;
double r3852918 = sqrt(r3852917);
double r3852919 = r3852918 - r3852901;
double r3852920 = r3852916 / r3852919;
double r3852921 = 2.0;
double r3852922 = r3852921 * r3852913;
double r3852923 = r3852920 / r3852922;
double r3852924 = 1.7205132563858266e+103;
bool r3852925 = r3852901 <= r3852924;
double r3852926 = 1.0;
double r3852927 = r3852926 / r3852922;
double r3852928 = -r3852901;
double r3852929 = r3852928 - r3852918;
double r3852930 = r3852927 * r3852929;
double r3852931 = r3852901 / r3852913;
double r3852932 = r3852906 - r3852931;
double r3852933 = 1.0;
double r3852934 = r3852932 * r3852933;
double r3852935 = r3852925 ? r3852930 : r3852934;
double r3852936 = r3852909 ? r3852923 : r3852935;
double r3852937 = r3852903 ? r3852907 : r3852936;
return r3852937;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.4 |
|---|---|
| Target | 21.3 |
| Herbie | 8.4 |
if b < -3.234164035284793e+22Initial program 56.6
Taylor expanded around -inf 4.6
if -3.234164035284793e+22 < b < -2.4242286502051438e-135Initial program 36.3
rmApplied flip--36.4
Simplified16.2
Simplified16.2
if -2.4242286502051438e-135 < b < 1.7205132563858266e+103Initial program 11.0
rmApplied div-inv11.2
if 1.7205132563858266e+103 < b Initial program 47.4
rmApplied flip--63.2
Simplified63.2
Simplified63.2
Taylor expanded around inf 3.2
Simplified3.2
Final simplification8.4
herbie shell --seed 2019165 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))