\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{\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)} - b}{2}}{a}\\
\mathbf{elif}\;b \le 3.463606471108268 \cdot 10^{+121}:\\
\;\;\;\;\frac{c \cdot -2}{\sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot -4\right) \cdot c\right)\right)} + b}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r29381556 = b;
double r29381557 = -r29381556;
double r29381558 = r29381556 * r29381556;
double r29381559 = 4.0;
double r29381560 = a;
double r29381561 = r29381559 * r29381560;
double r29381562 = c;
double r29381563 = r29381561 * r29381562;
double r29381564 = r29381558 - r29381563;
double r29381565 = sqrt(r29381564);
double r29381566 = r29381557 + r29381565;
double r29381567 = 2.0;
double r29381568 = r29381567 * r29381560;
double r29381569 = r29381566 / r29381568;
return r29381569;
}
double f(double a, double b, double c) {
double r29381570 = b;
double r29381571 = -3.263941314600607e+152;
bool r29381572 = r29381570 <= r29381571;
double r29381573 = c;
double r29381574 = r29381573 / r29381570;
double r29381575 = a;
double r29381576 = r29381570 / r29381575;
double r29381577 = r29381574 - r29381576;
double r29381578 = -4.687918346756617e-254;
bool r29381579 = r29381570 <= r29381578;
double r29381580 = r29381573 * r29381575;
double r29381581 = -4.0;
double r29381582 = r29381570 * r29381570;
double r29381583 = fma(r29381580, r29381581, r29381582);
double r29381584 = sqrt(r29381583);
double r29381585 = r29381584 - r29381570;
double r29381586 = 2.0;
double r29381587 = r29381585 / r29381586;
double r29381588 = r29381587 / r29381575;
double r29381589 = 3.463606471108268e+121;
bool r29381590 = r29381570 <= r29381589;
double r29381591 = -2.0;
double r29381592 = r29381573 * r29381591;
double r29381593 = r29381575 * r29381581;
double r29381594 = r29381593 * r29381573;
double r29381595 = fma(r29381570, r29381570, r29381594);
double r29381596 = sqrt(r29381595);
double r29381597 = r29381596 + r29381570;
double r29381598 = r29381592 / r29381597;
double r29381599 = -r29381574;
double r29381600 = r29381590 ? r29381598 : r29381599;
double r29381601 = r29381579 ? r29381588 : r29381600;
double r29381602 = r29381572 ? r29381577 : r29381601;
return r29381602;
}




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
Taylor expanded around -inf 7.8
Simplified7.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)))