\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -9.348931433494438 \cdot 10^{+39}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 1.3353078790738604 \cdot 10^{-121}:\\
\;\;\;\;\frac{\frac{\sqrt{\left(a \cdot -4\right) \cdot c + b \cdot b} - b}{2}}{a}\\
\mathbf{elif}\;b \le 1.6168702840263923 \cdot 10^{-79}:\\
\;\;\;\;\frac{1}{\frac{2}{-2 \cdot \frac{c}{b}}}\\
\mathbf{elif}\;b \le 1.546013236023957 \cdot 10^{-67}:\\
\;\;\;\;\frac{\frac{\sqrt{\left(a \cdot -4\right) \cdot c + b \cdot b} - b}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r13047362 = b;
double r13047363 = -r13047362;
double r13047364 = r13047362 * r13047362;
double r13047365 = 4.0;
double r13047366 = a;
double r13047367 = r13047365 * r13047366;
double r13047368 = c;
double r13047369 = r13047367 * r13047368;
double r13047370 = r13047364 - r13047369;
double r13047371 = sqrt(r13047370);
double r13047372 = r13047363 + r13047371;
double r13047373 = 2.0;
double r13047374 = r13047373 * r13047366;
double r13047375 = r13047372 / r13047374;
return r13047375;
}
double f(double a, double b, double c) {
double r13047376 = b;
double r13047377 = -9.348931433494438e+39;
bool r13047378 = r13047376 <= r13047377;
double r13047379 = c;
double r13047380 = r13047379 / r13047376;
double r13047381 = a;
double r13047382 = r13047376 / r13047381;
double r13047383 = r13047380 - r13047382;
double r13047384 = 1.3353078790738604e-121;
bool r13047385 = r13047376 <= r13047384;
double r13047386 = -4.0;
double r13047387 = r13047381 * r13047386;
double r13047388 = r13047387 * r13047379;
double r13047389 = r13047376 * r13047376;
double r13047390 = r13047388 + r13047389;
double r13047391 = sqrt(r13047390);
double r13047392 = r13047391 - r13047376;
double r13047393 = 2.0;
double r13047394 = r13047392 / r13047393;
double r13047395 = r13047394 / r13047381;
double r13047396 = 1.6168702840263923e-79;
bool r13047397 = r13047376 <= r13047396;
double r13047398 = 1.0;
double r13047399 = -2.0;
double r13047400 = r13047399 * r13047380;
double r13047401 = r13047393 / r13047400;
double r13047402 = r13047398 / r13047401;
double r13047403 = 1.546013236023957e-67;
bool r13047404 = r13047376 <= r13047403;
double r13047405 = -r13047380;
double r13047406 = r13047404 ? r13047395 : r13047405;
double r13047407 = r13047397 ? r13047402 : r13047406;
double r13047408 = r13047385 ? r13047395 : r13047407;
double r13047409 = r13047378 ? r13047383 : r13047408;
return r13047409;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.0 |
|---|---|
| Target | 20.1 |
| Herbie | 10.8 |
if b < -9.348931433494438e+39Initial program 34.0
Taylor expanded around -inf 6.2
if -9.348931433494438e+39 < b < 1.3353078790738604e-121 or 1.6168702840263923e-79 < b < 1.546013236023957e-67Initial program 12.9
rmApplied div-inv13.0
Simplified13.0
rmApplied associate-*r/12.9
Simplified12.9
if 1.3353078790738604e-121 < b < 1.6168702840263923e-79Initial program 32.1
rmApplied clear-num32.1
Simplified32.1
Taylor expanded around inf 35.8
if 1.546013236023957e-67 < b Initial program 52.3
Taylor expanded around inf 9.2
Simplified9.2
Final simplification10.8
herbie shell --seed 2019158
(FPCore (a b c)
:name "The quadratic formula (r1)"
: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)))