\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.2890050783826923 \cdot 10^{-183}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 1.786204067849289 \cdot 10^{+100}:\\
\;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4}\right) \cdot \frac{\frac{1}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;\left(2 \cdot \left(\frac{a}{\frac{b}{c}} - b\right)\right) \cdot \frac{\frac{1}{2}}{a}\\
\end{array}double f(double a, double b, double c) {
double r1415914 = b;
double r1415915 = -r1415914;
double r1415916 = r1415914 * r1415914;
double r1415917 = 4.0;
double r1415918 = a;
double r1415919 = c;
double r1415920 = r1415918 * r1415919;
double r1415921 = r1415917 * r1415920;
double r1415922 = r1415916 - r1415921;
double r1415923 = sqrt(r1415922);
double r1415924 = r1415915 - r1415923;
double r1415925 = 2.0;
double r1415926 = r1415925 * r1415918;
double r1415927 = r1415924 / r1415926;
return r1415927;
}
double f(double a, double b, double c) {
double r1415928 = b;
double r1415929 = -1.2890050783826923e-183;
bool r1415930 = r1415928 <= r1415929;
double r1415931 = c;
double r1415932 = r1415931 / r1415928;
double r1415933 = -r1415932;
double r1415934 = 1.786204067849289e+100;
bool r1415935 = r1415928 <= r1415934;
double r1415936 = -r1415928;
double r1415937 = r1415928 * r1415928;
double r1415938 = a;
double r1415939 = r1415931 * r1415938;
double r1415940 = 4.0;
double r1415941 = r1415939 * r1415940;
double r1415942 = r1415937 - r1415941;
double r1415943 = sqrt(r1415942);
double r1415944 = r1415936 - r1415943;
double r1415945 = 0.5;
double r1415946 = r1415945 / r1415938;
double r1415947 = r1415944 * r1415946;
double r1415948 = 2.0;
double r1415949 = r1415928 / r1415931;
double r1415950 = r1415938 / r1415949;
double r1415951 = r1415950 - r1415928;
double r1415952 = r1415948 * r1415951;
double r1415953 = r1415952 * r1415946;
double r1415954 = r1415935 ? r1415947 : r1415953;
double r1415955 = r1415930 ? r1415933 : r1415954;
return r1415955;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.6 |
|---|---|
| Target | 20.5 |
| Herbie | 11.3 |
if b < -1.2890050783826923e-183Initial program 48.2
rmApplied clear-num48.2
Simplified48.2
Taylor expanded around -inf 14.3
Simplified14.3
if -1.2890050783826923e-183 < b < 1.786204067849289e+100Initial program 10.5
rmApplied div-inv10.7
Simplified10.7
if 1.786204067849289e+100 < b Initial program 44.2
rmApplied div-inv44.3
Simplified44.3
Taylor expanded around inf 9.5
Simplified3.7
Final simplification11.3
herbie shell --seed 2019151 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))