\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 -3.010589257950129889712053784076648301115 \cdot 10^{115}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -1.051859552149432150298271086580779209751 \cdot 10^{-283}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\mathbf{elif}\;b \le 1.274921840087524160396938471478240294554 \cdot 10^{104}:\\
\;\;\;\;\frac{\frac{1}{\frac{2}{4}} \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 r80906 = b;
double r80907 = -r80906;
double r80908 = r80906 * r80906;
double r80909 = 4.0;
double r80910 = a;
double r80911 = r80909 * r80910;
double r80912 = c;
double r80913 = r80911 * r80912;
double r80914 = r80908 - r80913;
double r80915 = sqrt(r80914);
double r80916 = r80907 + r80915;
double r80917 = 2.0;
double r80918 = r80917 * r80910;
double r80919 = r80916 / r80918;
return r80919;
}
double f(double a, double b, double c) {
double r80920 = b;
double r80921 = -3.01058925795013e+115;
bool r80922 = r80920 <= r80921;
double r80923 = 1.0;
double r80924 = c;
double r80925 = r80924 / r80920;
double r80926 = a;
double r80927 = r80920 / r80926;
double r80928 = r80925 - r80927;
double r80929 = r80923 * r80928;
double r80930 = -1.0518595521494322e-283;
bool r80931 = r80920 <= r80930;
double r80932 = 1.0;
double r80933 = 2.0;
double r80934 = r80933 * r80926;
double r80935 = -r80920;
double r80936 = r80920 * r80920;
double r80937 = 4.0;
double r80938 = r80937 * r80926;
double r80939 = r80938 * r80924;
double r80940 = r80936 - r80939;
double r80941 = sqrt(r80940);
double r80942 = r80935 + r80941;
double r80943 = r80934 / r80942;
double r80944 = r80932 / r80943;
double r80945 = 1.2749218400875242e+104;
bool r80946 = r80920 <= r80945;
double r80947 = r80933 / r80937;
double r80948 = r80932 / r80947;
double r80949 = r80948 * r80924;
double r80950 = r80935 - r80941;
double r80951 = r80949 / r80950;
double r80952 = -1.0;
double r80953 = r80952 * r80925;
double r80954 = r80946 ? r80951 : r80953;
double r80955 = r80931 ? r80944 : r80954;
double r80956 = r80922 ? r80929 : r80955;
return r80956;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 21.1 |
| Herbie | 6.4 |
if b < -3.01058925795013e+115Initial program 50.4
Taylor expanded around -inf 3.2
Simplified3.2
if -3.01058925795013e+115 < b < -1.0518595521494322e-283Initial program 8.8
rmApplied clear-num9.0
if -1.0518595521494322e-283 < b < 1.2749218400875242e+104Initial program 31.6
rmApplied flip-+31.6
Simplified15.4
rmApplied *-un-lft-identity15.4
Applied *-un-lft-identity15.4
Applied times-frac15.4
Applied associate-/l*15.6
Simplified14.9
rmApplied times-frac14.9
Simplified8.7
rmApplied associate-/r*8.4
Simplified8.3
if 1.2749218400875242e+104 < b Initial program 59.9
Taylor expanded around inf 2.4
Final simplification6.4
herbie shell --seed 2019291
(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)))