\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 -6.9315373378557038 \cdot 10^{-23}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 1.77017414835012383 \cdot 10^{70}:\\
\;\;\;\;\frac{\left(-b\right) - \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 r332 = b;
double r333 = -r332;
double r334 = r332 * r332;
double r335 = 4.0;
double r336 = a;
double r337 = c;
double r338 = r336 * r337;
double r339 = r335 * r338;
double r340 = r334 - r339;
double r341 = sqrt(r340);
double r342 = r333 - r341;
double r343 = 2.0;
double r344 = r343 * r336;
double r345 = r342 / r344;
return r345;
}
double f(double a, double b, double c) {
double r346 = b;
double r347 = -6.931537337855704e-23;
bool r348 = r346 <= r347;
double r349 = -1.0;
double r350 = c;
double r351 = r350 / r346;
double r352 = r349 * r351;
double r353 = 1.7701741483501238e+70;
bool r354 = r346 <= r353;
double r355 = -r346;
double r356 = r346 * r346;
double r357 = 4.0;
double r358 = a;
double r359 = r358 * r350;
double r360 = r357 * r359;
double r361 = r356 - r360;
double r362 = sqrt(r361);
double r363 = r355 - r362;
double r364 = 2.0;
double r365 = r364 * r358;
double r366 = r363 / r365;
double r367 = r346 / r358;
double r368 = r349 * r367;
double r369 = r354 ? r366 : r368;
double r370 = r348 ? r352 : r369;
return r370;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 20.8 |
| Herbie | 10.8 |
if b < -6.931537337855704e-23Initial program 54.3
Taylor expanded around -inf 7.3
if -6.931537337855704e-23 < b < 1.7701741483501238e+70Initial program 15.5
rmApplied div-inv15.6
rmApplied un-div-inv15.5
if 1.7701741483501238e+70 < b Initial program 41.6
rmApplied clear-num41.7
Taylor expanded around 0 5.7
Final simplification10.8
herbie shell --seed 2020025 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))