\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{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 1.3353078790738604 \cdot 10^{-121}:\\
\;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-4 \cdot a\right)\right)} - b}}}{2}\\
\mathbf{elif}\;b \le 1.6168702840263923 \cdot 10^{-79}:\\
\;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\
\mathbf{elif}\;b \le 1.546013236023957 \cdot 10^{-67}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \left(\sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-4 \cdot a\right)\right)} - b\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\
\end{array}double f(double a, double b, double c) {
double r2720370 = b;
double r2720371 = -r2720370;
double r2720372 = r2720370 * r2720370;
double r2720373 = 4.0;
double r2720374 = a;
double r2720375 = r2720373 * r2720374;
double r2720376 = c;
double r2720377 = r2720375 * r2720376;
double r2720378 = r2720372 - r2720377;
double r2720379 = sqrt(r2720378);
double r2720380 = r2720371 + r2720379;
double r2720381 = 2.0;
double r2720382 = r2720381 * r2720374;
double r2720383 = r2720380 / r2720382;
return r2720383;
}
double f(double a, double b, double c) {
double r2720384 = b;
double r2720385 = -9.348931433494438e+39;
bool r2720386 = r2720384 <= r2720385;
double r2720387 = c;
double r2720388 = r2720387 / r2720384;
double r2720389 = a;
double r2720390 = r2720384 / r2720389;
double r2720391 = r2720388 - r2720390;
double r2720392 = 2.0;
double r2720393 = r2720391 * r2720392;
double r2720394 = r2720393 / r2720392;
double r2720395 = 1.3353078790738604e-121;
bool r2720396 = r2720384 <= r2720395;
double r2720397 = 1.0;
double r2720398 = -4.0;
double r2720399 = r2720398 * r2720389;
double r2720400 = r2720387 * r2720399;
double r2720401 = fma(r2720384, r2720384, r2720400);
double r2720402 = sqrt(r2720401);
double r2720403 = r2720402 - r2720384;
double r2720404 = r2720389 / r2720403;
double r2720405 = r2720397 / r2720404;
double r2720406 = r2720405 / r2720392;
double r2720407 = 1.6168702840263923e-79;
bool r2720408 = r2720384 <= r2720407;
double r2720409 = -2.0;
double r2720410 = r2720388 * r2720409;
double r2720411 = r2720410 / r2720392;
double r2720412 = 1.546013236023957e-67;
bool r2720413 = r2720384 <= r2720412;
double r2720414 = r2720397 / r2720389;
double r2720415 = r2720414 * r2720403;
double r2720416 = r2720415 / r2720392;
double r2720417 = r2720413 ? r2720416 : r2720411;
double r2720418 = r2720408 ? r2720411 : r2720417;
double r2720419 = r2720396 ? r2720406 : r2720418;
double r2720420 = r2720386 ? r2720394 : r2720419;
return r2720420;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.0 |
|---|---|
| Target | 20.1 |
| Herbie | 10.9 |
if b < -9.348931433494438e+39Initial program 34.0
Simplified34.0
rmApplied div-inv34.1
Taylor expanded around -inf 6.2
Simplified6.2
if -9.348931433494438e+39 < b < 1.3353078790738604e-121Initial program 12.2
Simplified12.2
rmApplied clear-num12.3
if 1.3353078790738604e-121 < b < 1.6168702840263923e-79 or 1.546013236023957e-67 < b Initial program 50.8
Simplified50.8
Taylor expanded around inf 11.2
if 1.6168702840263923e-79 < b < 1.546013236023957e-67Initial program 35.8
Simplified35.8
rmApplied div-inv35.9
Final simplification10.9
herbie shell --seed 2019158 +o rules:numerics
(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)))