\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 -7.6038168240882645 \cdot 10^{144}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.2731438419880699 \cdot 10^{-203}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\mathbf{elif}\;b \le 2.1125387673008883 \cdot 10^{122}:\\
\;\;\;\;\frac{\frac{\frac{1}{\frac{2}{4}}}{\frac{1}{c}}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r190392 = b;
double r190393 = -r190392;
double r190394 = r190392 * r190392;
double r190395 = 4.0;
double r190396 = a;
double r190397 = r190395 * r190396;
double r190398 = c;
double r190399 = r190397 * r190398;
double r190400 = r190394 - r190399;
double r190401 = sqrt(r190400);
double r190402 = r190393 + r190401;
double r190403 = 2.0;
double r190404 = r190403 * r190396;
double r190405 = r190402 / r190404;
return r190405;
}
double f(double a, double b, double c) {
double r190406 = b;
double r190407 = -7.603816824088264e+144;
bool r190408 = r190406 <= r190407;
double r190409 = 1.0;
double r190410 = c;
double r190411 = r190410 / r190406;
double r190412 = a;
double r190413 = r190406 / r190412;
double r190414 = r190411 - r190413;
double r190415 = r190409 * r190414;
double r190416 = -3.27314384198807e-203;
bool r190417 = r190406 <= r190416;
double r190418 = -r190406;
double r190419 = r190406 * r190406;
double r190420 = 4.0;
double r190421 = r190420 * r190412;
double r190422 = r190421 * r190410;
double r190423 = r190419 - r190422;
double r190424 = sqrt(r190423);
double r190425 = sqrt(r190424);
double r190426 = r190425 * r190425;
double r190427 = r190418 + r190426;
double r190428 = 2.0;
double r190429 = r190428 * r190412;
double r190430 = r190427 / r190429;
double r190431 = 2.1125387673008883e+122;
bool r190432 = r190406 <= r190431;
double r190433 = 1.0;
double r190434 = r190428 / r190420;
double r190435 = r190433 / r190434;
double r190436 = r190433 / r190410;
double r190437 = r190435 / r190436;
double r190438 = r190418 - r190424;
double r190439 = r190437 / r190438;
double r190440 = -1.0;
double r190441 = r190440 * r190411;
double r190442 = r190432 ? r190439 : r190441;
double r190443 = r190417 ? r190430 : r190442;
double r190444 = r190408 ? r190415 : r190443;
return r190444;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.2 |
| Herbie | 6.5 |
if b < -7.603816824088264e+144Initial program 61.2
Taylor expanded around -inf 2.8
Simplified2.8
if -7.603816824088264e+144 < b < -3.27314384198807e-203Initial program 7.1
rmApplied add-sqr-sqrt7.1
Applied sqrt-prod7.4
if -3.27314384198807e-203 < b < 2.1125387673008883e+122Initial program 29.8
rmApplied flip-+29.9
Simplified16.2
rmApplied *-un-lft-identity16.2
Applied *-un-lft-identity16.2
Applied times-frac16.2
Applied associate-/l*16.3
Simplified15.5
rmApplied associate-/r*15.3
Simplified9.5
if 2.1125387673008883e+122 < b Initial program 61.1
Taylor expanded around inf 2.1
Final simplification6.5
herbie shell --seed 2020036 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.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)))