\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 -6.151530580746178328361254057251815139505 \cdot 10^{-108}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 46522626219735482368:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r76265 = b;
double r76266 = -r76265;
double r76267 = r76265 * r76265;
double r76268 = 4.0;
double r76269 = a;
double r76270 = c;
double r76271 = r76269 * r76270;
double r76272 = r76268 * r76271;
double r76273 = r76267 - r76272;
double r76274 = sqrt(r76273);
double r76275 = r76266 - r76274;
double r76276 = 2.0;
double r76277 = r76276 * r76269;
double r76278 = r76275 / r76277;
return r76278;
}
double f(double a, double b, double c) {
double r76279 = b;
double r76280 = -6.151530580746178e-108;
bool r76281 = r76279 <= r76280;
double r76282 = -1.0;
double r76283 = c;
double r76284 = r76283 / r76279;
double r76285 = r76282 * r76284;
double r76286 = 4.652262621973548e+19;
bool r76287 = r76279 <= r76286;
double r76288 = 1.0;
double r76289 = 2.0;
double r76290 = a;
double r76291 = r76289 * r76290;
double r76292 = -r76279;
double r76293 = r76279 * r76279;
double r76294 = 4.0;
double r76295 = r76290 * r76283;
double r76296 = r76294 * r76295;
double r76297 = r76293 - r76296;
double r76298 = sqrt(r76297);
double r76299 = r76292 - r76298;
double r76300 = r76291 / r76299;
double r76301 = r76288 / r76300;
double r76302 = 1.0;
double r76303 = r76279 / r76290;
double r76304 = r76284 - r76303;
double r76305 = r76302 * r76304;
double r76306 = r76287 ? r76301 : r76305;
double r76307 = r76281 ? r76285 : r76306;
return r76307;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 10.6 |
if b < -6.151530580746178e-108Initial program 51.4
Taylor expanded around -inf 10.7
if -6.151530580746178e-108 < b < 4.652262621973548e+19Initial program 12.9
rmApplied clear-num13.0
if 4.652262621973548e+19 < b Initial program 34.5
Taylor expanded around inf 6.9
Simplified6.9
Final simplification10.6
herbie shell --seed 2019350 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))