\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 -5.58543573862810322 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -2.3730540219645598 \cdot 10^{-278}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\mathbf{elif}\;b \le 1.55563303224959 \cdot 10^{106}:\\
\;\;\;\;\frac{1}{\frac{0.5}{c} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r147545 = b;
double r147546 = -r147545;
double r147547 = r147545 * r147545;
double r147548 = 4.0;
double r147549 = a;
double r147550 = r147548 * r147549;
double r147551 = c;
double r147552 = r147550 * r147551;
double r147553 = r147547 - r147552;
double r147554 = sqrt(r147553);
double r147555 = r147546 + r147554;
double r147556 = 2.0;
double r147557 = r147556 * r147549;
double r147558 = r147555 / r147557;
return r147558;
}
double f(double a, double b, double c) {
double r147559 = b;
double r147560 = -5.585435738628103e+150;
bool r147561 = r147559 <= r147560;
double r147562 = 1.0;
double r147563 = c;
double r147564 = r147563 / r147559;
double r147565 = a;
double r147566 = r147559 / r147565;
double r147567 = r147564 - r147566;
double r147568 = r147562 * r147567;
double r147569 = -2.3730540219645598e-278;
bool r147570 = r147559 <= r147569;
double r147571 = 1.0;
double r147572 = 2.0;
double r147573 = r147572 * r147565;
double r147574 = -r147559;
double r147575 = r147559 * r147559;
double r147576 = 4.0;
double r147577 = r147576 * r147565;
double r147578 = r147577 * r147563;
double r147579 = r147575 - r147578;
double r147580 = sqrt(r147579);
double r147581 = r147574 + r147580;
double r147582 = r147573 / r147581;
double r147583 = r147571 / r147582;
double r147584 = 1.55563303224959e+106;
bool r147585 = r147559 <= r147584;
double r147586 = 0.5;
double r147587 = r147586 / r147563;
double r147588 = r147574 - r147580;
double r147589 = r147587 * r147588;
double r147590 = r147571 / r147589;
double r147591 = -1.0;
double r147592 = r147591 * r147564;
double r147593 = r147585 ? r147590 : r147592;
double r147594 = r147570 ? r147583 : r147593;
double r147595 = r147561 ? r147568 : r147594;
return r147595;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 20.7 |
| Herbie | 6.9 |
if b < -5.585435738628103e+150Initial program 61.5
Taylor expanded around -inf 2.2
Simplified2.2
if -5.585435738628103e+150 < b < -2.3730540219645598e-278Initial program 8.1
rmApplied clear-num8.3
if -2.3730540219645598e-278 < b < 1.55563303224959e+106Initial program 31.3
rmApplied flip-+31.3
Simplified16.7
rmApplied *-un-lft-identity16.7
Applied *-un-lft-identity16.7
Applied times-frac16.7
Applied associate-/l*16.9
Simplified16.2
Taylor expanded around 0 9.9
if 1.55563303224959e+106 < b Initial program 60.3
Taylor expanded around inf 2.7
Final simplification6.9
herbie shell --seed 2020062 +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)))