\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.61268387266151013 \cdot 10^{141}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 2.5402182456312607 \cdot 10^{-243}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}\\
\mathbf{elif}\;b \le 2.8568501197790958 \cdot 10^{109}:\\
\;\;\;\;\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 \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r87760 = b;
double r87761 = -r87760;
double r87762 = r87760 * r87760;
double r87763 = 4.0;
double r87764 = a;
double r87765 = c;
double r87766 = r87764 * r87765;
double r87767 = r87763 * r87766;
double r87768 = r87762 - r87767;
double r87769 = sqrt(r87768);
double r87770 = r87761 - r87769;
double r87771 = 2.0;
double r87772 = r87771 * r87764;
double r87773 = r87770 / r87772;
return r87773;
}
double f(double a, double b, double c) {
double r87774 = b;
double r87775 = -2.61268387266151e+141;
bool r87776 = r87774 <= r87775;
double r87777 = -1.0;
double r87778 = c;
double r87779 = r87778 / r87774;
double r87780 = r87777 * r87779;
double r87781 = 2.5402182456312607e-243;
bool r87782 = r87774 <= r87781;
double r87783 = 2.0;
double r87784 = r87783 * r87778;
double r87785 = r87774 * r87774;
double r87786 = 4.0;
double r87787 = a;
double r87788 = r87787 * r87778;
double r87789 = r87786 * r87788;
double r87790 = r87785 - r87789;
double r87791 = sqrt(r87790);
double r87792 = r87791 - r87774;
double r87793 = r87784 / r87792;
double r87794 = 2.8568501197790958e+109;
bool r87795 = r87774 <= r87794;
double r87796 = -r87774;
double r87797 = r87796 - r87791;
double r87798 = 1.0;
double r87799 = r87783 * r87787;
double r87800 = r87798 / r87799;
double r87801 = r87797 * r87800;
double r87802 = r87774 / r87787;
double r87803 = r87777 * r87802;
double r87804 = r87795 ? r87801 : r87803;
double r87805 = r87782 ? r87793 : r87804;
double r87806 = r87776 ? r87780 : r87805;
return r87806;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 20.6 |
| Herbie | 6.7 |
if b < -2.61268387266151e+141Initial program 62.7
Taylor expanded around -inf 1.9
if -2.61268387266151e+141 < b < 2.5402182456312607e-243Initial program 32.8
rmApplied div-inv32.8
rmApplied flip--32.9
Simplified15.9
Simplified15.9
rmApplied associate-*l/14.6
Simplified14.5
Taylor expanded around 0 8.6
if 2.5402182456312607e-243 < b < 2.8568501197790958e+109Initial program 8.7
rmApplied div-inv8.9
if 2.8568501197790958e+109 < b Initial program 49.1
rmApplied div-inv49.1
rmApplied flip--63.2
Simplified62.2
Simplified62.2
Taylor expanded around 0 3.6
Final simplification6.7
herbie shell --seed 2020047
(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)))