\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 -4.706781135059311758856471716413486308072 \cdot 10^{-92}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 5.722235152988638272816037483919181313619 \cdot 10^{98}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r73216 = b;
double r73217 = -r73216;
double r73218 = r73216 * r73216;
double r73219 = 4.0;
double r73220 = a;
double r73221 = c;
double r73222 = r73220 * r73221;
double r73223 = r73219 * r73222;
double r73224 = r73218 - r73223;
double r73225 = sqrt(r73224);
double r73226 = r73217 - r73225;
double r73227 = 2.0;
double r73228 = r73227 * r73220;
double r73229 = r73226 / r73228;
return r73229;
}
double f(double a, double b, double c) {
double r73230 = b;
double r73231 = -4.706781135059312e-92;
bool r73232 = r73230 <= r73231;
double r73233 = -1.0;
double r73234 = c;
double r73235 = r73234 / r73230;
double r73236 = r73233 * r73235;
double r73237 = 5.722235152988638e+98;
bool r73238 = r73230 <= r73237;
double r73239 = -r73230;
double r73240 = r73230 * r73230;
double r73241 = 4.0;
double r73242 = a;
double r73243 = r73242 * r73234;
double r73244 = r73241 * r73243;
double r73245 = r73240 - r73244;
double r73246 = sqrt(r73245);
double r73247 = r73239 - r73246;
double r73248 = 2.0;
double r73249 = r73248 * r73242;
double r73250 = r73247 / r73249;
double r73251 = 1.0;
double r73252 = r73230 / r73242;
double r73253 = r73235 - r73252;
double r73254 = r73251 * r73253;
double r73255 = r73238 ? r73250 : r73254;
double r73256 = r73232 ? r73236 : r73255;
return r73256;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 21.5 |
| Herbie | 10.2 |
if b < -4.706781135059312e-92Initial program 52.4
Taylor expanded around -inf 10.3
if -4.706781135059312e-92 < b < 5.722235152988638e+98Initial program 12.7
rmApplied div-inv12.8
rmApplied un-div-inv12.7
if 5.722235152988638e+98 < b Initial program 47.2
Taylor expanded around inf 3.6
Simplified3.6
Final simplification10.2
herbie shell --seed 2019353 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.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)))