\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.8993775207591446 \cdot 10^{+126}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 2.6443485350724205 \cdot 10^{-92}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} - b}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-c}{b}\\
\end{array}double f(double a, double b, double c) {
double r2272225 = b;
double r2272226 = -r2272225;
double r2272227 = r2272225 * r2272225;
double r2272228 = 4.0;
double r2272229 = a;
double r2272230 = c;
double r2272231 = r2272229 * r2272230;
double r2272232 = r2272228 * r2272231;
double r2272233 = r2272227 - r2272232;
double r2272234 = sqrt(r2272233);
double r2272235 = r2272226 + r2272234;
double r2272236 = 2.0;
double r2272237 = r2272236 * r2272229;
double r2272238 = r2272235 / r2272237;
return r2272238;
}
double f(double a, double b, double c) {
double r2272239 = b;
double r2272240 = -4.8993775207591446e+126;
bool r2272241 = r2272239 <= r2272240;
double r2272242 = c;
double r2272243 = r2272242 / r2272239;
double r2272244 = a;
double r2272245 = r2272239 / r2272244;
double r2272246 = r2272243 - r2272245;
double r2272247 = 2.6443485350724205e-92;
bool r2272248 = r2272239 <= r2272247;
double r2272249 = -4.0;
double r2272250 = r2272244 * r2272249;
double r2272251 = r2272239 * r2272239;
double r2272252 = fma(r2272250, r2272242, r2272251);
double r2272253 = sqrt(r2272252);
double r2272254 = r2272253 - r2272239;
double r2272255 = 2.0;
double r2272256 = r2272254 / r2272255;
double r2272257 = r2272256 / r2272244;
double r2272258 = -r2272242;
double r2272259 = r2272258 / r2272239;
double r2272260 = r2272248 ? r2272257 : r2272259;
double r2272261 = r2272241 ? r2272246 : r2272260;
return r2272261;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.7 |
|---|---|
| Target | 20.5 |
| Herbie | 10.0 |
if b < -4.8993775207591446e+126Initial program 51.7
Taylor expanded around -inf 3.5
if -4.8993775207591446e+126 < b < 2.6443485350724205e-92Initial program 12.3
rmApplied associate-/r*12.2
Simplified12.3
rmApplied *-un-lft-identity12.3
Applied associate-/r*12.3
Simplified12.2
if 2.6443485350724205e-92 < b Initial program 51.9
Taylor expanded around inf 9.6
Simplified9.6
Final simplification10.0
herbie shell --seed 2019135 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))