\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 -9.66568096049333791 \cdot 10^{-39}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 1.96400887454670113 \cdot 10^{84}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r81404 = b;
double r81405 = -r81404;
double r81406 = r81404 * r81404;
double r81407 = 4.0;
double r81408 = a;
double r81409 = c;
double r81410 = r81408 * r81409;
double r81411 = r81407 * r81410;
double r81412 = r81406 - r81411;
double r81413 = sqrt(r81412);
double r81414 = r81405 - r81413;
double r81415 = 2.0;
double r81416 = r81415 * r81408;
double r81417 = r81414 / r81416;
return r81417;
}
double f(double a, double b, double c) {
double r81418 = b;
double r81419 = -9.665680960493338e-39;
bool r81420 = r81418 <= r81419;
double r81421 = -1.0;
double r81422 = c;
double r81423 = r81422 / r81418;
double r81424 = r81421 * r81423;
double r81425 = 1.964008874546701e+84;
bool r81426 = r81418 <= r81425;
double r81427 = -r81418;
double r81428 = r81418 * r81418;
double r81429 = 4.0;
double r81430 = a;
double r81431 = r81430 * r81422;
double r81432 = r81429 * r81431;
double r81433 = r81428 - r81432;
double r81434 = sqrt(r81433);
double r81435 = r81427 - r81434;
double r81436 = 2.0;
double r81437 = r81436 * r81430;
double r81438 = r81435 / r81437;
double r81439 = r81418 / r81430;
double r81440 = r81421 * r81439;
double r81441 = r81426 ? r81438 : r81440;
double r81442 = r81420 ? r81424 : r81441;
return r81442;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.4 |
|---|---|
| Target | 21.3 |
| Herbie | 10.2 |
if b < -9.665680960493338e-39Initial program 55.2
Taylor expanded around -inf 6.9
if -9.665680960493338e-39 < b < 1.964008874546701e+84Initial program 14.7
if 1.964008874546701e+84 < b Initial program 44.4
rmApplied clear-num44.5
Taylor expanded around 0 4.8
Final simplification10.2
herbie shell --seed 2020042 +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)))