\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 -2.773941363092559658836993715800348666263 \cdot 10^{46}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -1.052552064964455729256789034532554564117 \cdot 10^{-131}:\\
\;\;\;\;\frac{\frac{4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}{2 \cdot a}\\
\mathbf{elif}\;b \le 1.711794221765945466011689717230842352302 \cdot 10^{108}:\\
\;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r75633 = b;
double r75634 = -r75633;
double r75635 = r75633 * r75633;
double r75636 = 4.0;
double r75637 = a;
double r75638 = c;
double r75639 = r75637 * r75638;
double r75640 = r75636 * r75639;
double r75641 = r75635 - r75640;
double r75642 = sqrt(r75641);
double r75643 = r75634 - r75642;
double r75644 = 2.0;
double r75645 = r75644 * r75637;
double r75646 = r75643 / r75645;
return r75646;
}
double f(double a, double b, double c) {
double r75647 = b;
double r75648 = -2.7739413630925597e+46;
bool r75649 = r75647 <= r75648;
double r75650 = -1.0;
double r75651 = c;
double r75652 = r75651 / r75647;
double r75653 = r75650 * r75652;
double r75654 = -1.0525520649644557e-131;
bool r75655 = r75647 <= r75654;
double r75656 = 4.0;
double r75657 = a;
double r75658 = r75657 * r75651;
double r75659 = r75656 * r75658;
double r75660 = r75647 * r75647;
double r75661 = r75660 - r75659;
double r75662 = sqrt(r75661);
double r75663 = r75662 - r75647;
double r75664 = r75659 / r75663;
double r75665 = 2.0;
double r75666 = r75665 * r75657;
double r75667 = r75664 / r75666;
double r75668 = 1.7117942217659455e+108;
bool r75669 = r75647 <= r75668;
double r75670 = -r75647;
double r75671 = r75670 - r75662;
double r75672 = 1.0;
double r75673 = r75672 / r75666;
double r75674 = r75671 * r75673;
double r75675 = 1.0;
double r75676 = r75647 / r75657;
double r75677 = r75652 - r75676;
double r75678 = r75675 * r75677;
double r75679 = r75669 ? r75674 : r75678;
double r75680 = r75655 ? r75667 : r75679;
double r75681 = r75649 ? r75653 : r75680;
return r75681;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.9 |
|---|---|
| Target | 21.4 |
| Herbie | 9.1 |
if b < -2.7739413630925597e+46Initial program 58.0
Taylor expanded around -inf 4.1
if -2.7739413630925597e+46 < b < -1.0525520649644557e-131Initial program 38.9
rmApplied flip--38.9
Simplified17.4
Simplified17.4
if -1.0525520649644557e-131 < b < 1.7117942217659455e+108Initial program 11.7
rmApplied div-inv11.9
if 1.7117942217659455e+108 < b Initial program 49.7
Taylor expanded around inf 3.0
Simplified3.0
Final simplification9.1
herbie shell --seed 2019235
(FPCore (a b c)
:name "The quadratic formula (r2)"
: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)))