\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 -8.00336887744975224 \cdot 10^{118}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.72191682831812008 \cdot 10^{-246}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{elif}\;b \le 5.54044500863652378 \cdot 10^{145}:\\
\;\;\;\;\frac{\frac{1}{0.5} \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 r94006 = b;
double r94007 = -r94006;
double r94008 = r94006 * r94006;
double r94009 = 4.0;
double r94010 = a;
double r94011 = r94009 * r94010;
double r94012 = c;
double r94013 = r94011 * r94012;
double r94014 = r94008 - r94013;
double r94015 = sqrt(r94014);
double r94016 = r94007 + r94015;
double r94017 = 2.0;
double r94018 = r94017 * r94010;
double r94019 = r94016 / r94018;
return r94019;
}
double f(double a, double b, double c) {
double r94020 = b;
double r94021 = -8.003368877449752e+118;
bool r94022 = r94020 <= r94021;
double r94023 = 1.0;
double r94024 = c;
double r94025 = r94024 / r94020;
double r94026 = a;
double r94027 = r94020 / r94026;
double r94028 = r94025 - r94027;
double r94029 = r94023 * r94028;
double r94030 = -3.72191682831812e-246;
bool r94031 = r94020 <= r94030;
double r94032 = -r94020;
double r94033 = r94020 * r94020;
double r94034 = 4.0;
double r94035 = r94034 * r94026;
double r94036 = r94035 * r94024;
double r94037 = r94033 - r94036;
double r94038 = sqrt(r94037);
double r94039 = r94032 + r94038;
double r94040 = 2.0;
double r94041 = r94040 * r94026;
double r94042 = r94039 / r94041;
double r94043 = 5.540445008636524e+145;
bool r94044 = r94020 <= r94043;
double r94045 = 1.0;
double r94046 = 0.5;
double r94047 = r94045 / r94046;
double r94048 = r94047 * r94024;
double r94049 = r94032 - r94038;
double r94050 = r94048 / r94049;
double r94051 = -1.0;
double r94052 = r94051 * r94025;
double r94053 = r94044 ? r94050 : r94052;
double r94054 = r94031 ? r94042 : r94053;
double r94055 = r94022 ? r94029 : r94054;
return r94055;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.1 |
| Herbie | 6.2 |
if b < -8.003368877449752e+118Initial program 52.1
Taylor expanded around -inf 2.9
Simplified2.9
if -8.003368877449752e+118 < b < -3.72191682831812e-246Initial program 7.5
if -3.72191682831812e-246 < b < 5.540445008636524e+145Initial program 32.4
rmApplied flip-+32.5
Simplified15.8
rmApplied *-un-lft-identity15.8
Applied *-un-lft-identity15.8
Applied times-frac15.8
Applied associate-/l*16.0
Simplified14.7
Taylor expanded around 0 9.1
rmApplied associate-/r*8.6
Simplified8.6
if 5.540445008636524e+145 < b Initial program 63.2
Taylor expanded around inf 1.8
Final simplification6.2
herbie shell --seed 2020049 +o rules:numerics
(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)))