\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 -977083.9042033920995891094207763671875:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -2.277624610006997683151417691157213452138 \cdot 10^{-291}:\\
\;\;\;\;\frac{\frac{1 \cdot \left(\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)\right)}{2 \cdot a}}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{elif}\;b \le 4.294531430978972552500215519031197589784 \cdot 10^{104}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r77060 = b;
double r77061 = -r77060;
double r77062 = r77060 * r77060;
double r77063 = 4.0;
double r77064 = a;
double r77065 = c;
double r77066 = r77064 * r77065;
double r77067 = r77063 * r77066;
double r77068 = r77062 - r77067;
double r77069 = sqrt(r77068);
double r77070 = r77061 - r77069;
double r77071 = 2.0;
double r77072 = r77071 * r77064;
double r77073 = r77070 / r77072;
return r77073;
}
double f(double a, double b, double c) {
double r77074 = b;
double r77075 = -977083.9042033921;
bool r77076 = r77074 <= r77075;
double r77077 = -1.0;
double r77078 = c;
double r77079 = r77078 / r77074;
double r77080 = r77077 * r77079;
double r77081 = -2.2776246100069977e-291;
bool r77082 = r77074 <= r77081;
double r77083 = 1.0;
double r77084 = 2.0;
double r77085 = pow(r77074, r77084);
double r77086 = r77085 - r77085;
double r77087 = 4.0;
double r77088 = a;
double r77089 = r77088 * r77078;
double r77090 = r77087 * r77089;
double r77091 = r77086 + r77090;
double r77092 = r77083 * r77091;
double r77093 = 2.0;
double r77094 = r77093 * r77088;
double r77095 = r77092 / r77094;
double r77096 = -r77074;
double r77097 = r77074 * r77074;
double r77098 = r77097 - r77090;
double r77099 = sqrt(r77098);
double r77100 = r77096 + r77099;
double r77101 = r77095 / r77100;
double r77102 = 4.2945314309789726e+104;
bool r77103 = r77074 <= r77102;
double r77104 = r77096 / r77094;
double r77105 = r77099 / r77094;
double r77106 = r77104 - r77105;
double r77107 = r77074 / r77088;
double r77108 = r77077 * r77107;
double r77109 = r77103 ? r77106 : r77108;
double r77110 = r77082 ? r77101 : r77109;
double r77111 = r77076 ? r77080 : r77110;
return r77111;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 21.0 |
| Herbie | 8.5 |
if b < -977083.9042033921Initial program 56.3
Taylor expanded around -inf 5.1
if -977083.9042033921 < b < -2.2776246100069977e-291Initial program 27.2
rmApplied clear-num27.3
rmApplied flip--27.3
Applied associate-/r/27.4
Applied associate-/r*27.4
Simplified17.2
if -2.2776246100069977e-291 < b < 4.2945314309789726e+104Initial program 8.6
rmApplied div-sub8.6
if 4.2945314309789726e+104 < b Initial program 47.7
rmApplied clear-num47.7
Taylor expanded around 0 3.7
Final simplification8.5
herbie shell --seed 2019291
(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)))