\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.2375225949334019 \cdot 10^{57}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 8.67970785211126629 \cdot 10^{-40}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r195208 = b;
double r195209 = -r195208;
double r195210 = r195208 * r195208;
double r195211 = 4.0;
double r195212 = a;
double r195213 = r195211 * r195212;
double r195214 = c;
double r195215 = r195213 * r195214;
double r195216 = r195210 - r195215;
double r195217 = sqrt(r195216);
double r195218 = r195209 + r195217;
double r195219 = 2.0;
double r195220 = r195219 * r195212;
double r195221 = r195218 / r195220;
return r195221;
}
double f(double a, double b, double c) {
double r195222 = b;
double r195223 = -2.237522594933402e+57;
bool r195224 = r195222 <= r195223;
double r195225 = 1.0;
double r195226 = c;
double r195227 = r195226 / r195222;
double r195228 = a;
double r195229 = r195222 / r195228;
double r195230 = r195227 - r195229;
double r195231 = r195225 * r195230;
double r195232 = 8.679707852111266e-40;
bool r195233 = r195222 <= r195232;
double r195234 = -r195222;
double r195235 = r195222 * r195222;
double r195236 = 4.0;
double r195237 = r195236 * r195228;
double r195238 = r195237 * r195226;
double r195239 = r195235 - r195238;
double r195240 = sqrt(r195239);
double r195241 = r195234 + r195240;
double r195242 = 2.0;
double r195243 = r195242 * r195228;
double r195244 = r195241 / r195243;
double r195245 = -1.0;
double r195246 = r195245 * r195227;
double r195247 = r195233 ? r195244 : r195246;
double r195248 = r195224 ? r195231 : r195247;
return r195248;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 10.6 |
if b < -2.237522594933402e+57Initial program 38.1
Taylor expanded around -inf 5.5
Simplified5.5
if -2.237522594933402e+57 < b < 8.679707852111266e-40Initial program 15.3
rmApplied div-inv15.4
rmApplied un-div-inv15.3
if 8.679707852111266e-40 < b Initial program 55.1
Taylor expanded around inf 7.5
Final simplification10.6
herbie shell --seed 2020025 +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)))