\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 -3.263941314600607 \cdot 10^{+152}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le -4.687918346756617 \cdot 10^{-254}:\\
\;\;\;\;\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -4\right)\right)\right)} - b}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.463606471108268 \cdot 10^{+121}:\\
\;\;\;\;\frac{c \cdot -2}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -4\right)\right)\right)} + b}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r30543503 = b;
double r30543504 = -r30543503;
double r30543505 = r30543503 * r30543503;
double r30543506 = 4.0;
double r30543507 = a;
double r30543508 = r30543506 * r30543507;
double r30543509 = c;
double r30543510 = r30543508 * r30543509;
double r30543511 = r30543505 - r30543510;
double r30543512 = sqrt(r30543511);
double r30543513 = r30543504 + r30543512;
double r30543514 = 2.0;
double r30543515 = r30543514 * r30543507;
double r30543516 = r30543513 / r30543515;
return r30543516;
}
double f(double a, double b, double c) {
double r30543517 = b;
double r30543518 = -3.263941314600607e+152;
bool r30543519 = r30543517 <= r30543518;
double r30543520 = c;
double r30543521 = r30543520 / r30543517;
double r30543522 = a;
double r30543523 = r30543517 / r30543522;
double r30543524 = r30543521 - r30543523;
double r30543525 = -4.687918346756617e-254;
bool r30543526 = r30543517 <= r30543525;
double r30543527 = -4.0;
double r30543528 = r30543522 * r30543527;
double r30543529 = r30543520 * r30543528;
double r30543530 = fma(r30543517, r30543517, r30543529);
double r30543531 = sqrt(r30543530);
double r30543532 = r30543531 - r30543517;
double r30543533 = 2.0;
double r30543534 = r30543533 * r30543522;
double r30543535 = r30543532 / r30543534;
double r30543536 = 3.463606471108268e+121;
bool r30543537 = r30543517 <= r30543536;
double r30543538 = -2.0;
double r30543539 = r30543520 * r30543538;
double r30543540 = r30543531 + r30543517;
double r30543541 = r30543539 / r30543540;
double r30543542 = -r30543521;
double r30543543 = r30543537 ? r30543541 : r30543542;
double r30543544 = r30543526 ? r30543535 : r30543543;
double r30543545 = r30543519 ? r30543524 : r30543544;
return r30543545;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.3 |
| Herbie | 6.4 |
if b < -3.263941314600607e+152Initial program 60.1
Simplified60.1
Taylor expanded around -inf 2.3
if -3.263941314600607e+152 < b < -4.687918346756617e-254Initial program 7.8
Simplified7.8
rmApplied associate-/l/7.8
if -4.687918346756617e-254 < b < 3.463606471108268e+121Initial program 31.6
Simplified31.6
rmApplied flip--31.8
Simplified15.5
rmApplied *-un-lft-identity15.5
Applied *-un-lft-identity15.5
Applied times-frac15.5
Simplified15.5
Simplified8.7
if 3.463606471108268e+121 < b Initial program 59.8
Simplified59.8
Taylor expanded around inf 2.3
Simplified2.3
Final simplification6.4
herbie shell --seed 2019128 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 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)))