\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 -1.857238265713216596268581045781308602833 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 9.146553797812776905149011816443241056322 \cdot 10^{-50}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r60488 = b;
double r60489 = -r60488;
double r60490 = r60488 * r60488;
double r60491 = 4.0;
double r60492 = a;
double r60493 = r60491 * r60492;
double r60494 = c;
double r60495 = r60493 * r60494;
double r60496 = r60490 - r60495;
double r60497 = sqrt(r60496);
double r60498 = r60489 + r60497;
double r60499 = 2.0;
double r60500 = r60499 * r60492;
double r60501 = r60498 / r60500;
return r60501;
}
double f(double a, double b, double c) {
double r60502 = b;
double r60503 = -1.8572382657132166e+109;
bool r60504 = r60502 <= r60503;
double r60505 = 1.0;
double r60506 = c;
double r60507 = r60506 / r60502;
double r60508 = a;
double r60509 = r60502 / r60508;
double r60510 = r60507 - r60509;
double r60511 = r60505 * r60510;
double r60512 = 9.146553797812777e-50;
bool r60513 = r60502 <= r60512;
double r60514 = 1.0;
double r60515 = 2.0;
double r60516 = r60515 * r60508;
double r60517 = r60502 * r60502;
double r60518 = 4.0;
double r60519 = r60518 * r60508;
double r60520 = r60519 * r60506;
double r60521 = r60517 - r60520;
double r60522 = sqrt(r60521);
double r60523 = r60522 - r60502;
double r60524 = r60516 / r60523;
double r60525 = r60514 / r60524;
double r60526 = -1.0;
double r60527 = r60526 * r60507;
double r60528 = r60513 ? r60525 : r60527;
double r60529 = r60504 ? r60511 : r60528;
return r60529;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 20.8 |
| Herbie | 10.1 |
if b < -1.8572382657132166e+109Initial program 50.1
Simplified50.1
Taylor expanded around -inf 3.6
Simplified3.6
if -1.8572382657132166e+109 < b < 9.146553797812777e-50Initial program 13.8
Simplified13.8
rmApplied clear-num13.9
if 9.146553797812777e-50 < b Initial program 54.3
Simplified54.3
Taylor expanded around inf 7.8
Final simplification10.1
herbie shell --seed 2019347 +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)))