\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 -4.78285893492843261 \cdot 10^{-126}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 3.6627135292415903 \cdot 10^{111}:\\
\;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot b}{2 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r113177 = b;
double r113178 = -r113177;
double r113179 = r113177 * r113177;
double r113180 = 4.0;
double r113181 = a;
double r113182 = c;
double r113183 = r113181 * r113182;
double r113184 = r113180 * r113183;
double r113185 = r113179 - r113184;
double r113186 = sqrt(r113185);
double r113187 = r113178 - r113186;
double r113188 = 2.0;
double r113189 = r113188 * r113181;
double r113190 = r113187 / r113189;
return r113190;
}
double f(double a, double b, double c) {
double r113191 = b;
double r113192 = -4.7828589349284326e-126;
bool r113193 = r113191 <= r113192;
double r113194 = -1.0;
double r113195 = c;
double r113196 = r113195 / r113191;
double r113197 = r113194 * r113196;
double r113198 = 3.6627135292415903e+111;
bool r113199 = r113191 <= r113198;
double r113200 = -r113191;
double r113201 = r113191 * r113191;
double r113202 = 4.0;
double r113203 = a;
double r113204 = r113203 * r113195;
double r113205 = r113202 * r113204;
double r113206 = r113201 - r113205;
double r113207 = sqrt(r113206);
double r113208 = r113200 - r113207;
double r113209 = 1.0;
double r113210 = 2.0;
double r113211 = r113210 * r113203;
double r113212 = r113209 / r113211;
double r113213 = r113208 * r113212;
double r113214 = -2.0;
double r113215 = r113214 * r113191;
double r113216 = r113215 / r113211;
double r113217 = r113199 ? r113213 : r113216;
double r113218 = r113193 ? r113197 : r113217;
return r113218;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 20.6 |
| Herbie | 10.6 |
if b < -4.7828589349284326e-126Initial program 51.3
Taylor expanded around -inf 11.3
if -4.7828589349284326e-126 < b < 3.6627135292415903e+111Initial program 12.0
rmApplied div-inv12.1
if 3.6627135292415903e+111 < b Initial program 49.7
rmApplied add-sqr-sqrt49.7
Applied sqrt-prod49.8
rmApplied flip--61.8
Simplified62.1
Simplified62.3
Taylor expanded around 0 3.7
Final simplification10.6
herbie shell --seed 2020047 +o rules:numerics
(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)))