\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 -8.514236331386388029696934038334880301838 \cdot 10^{118}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.388070047225937856958905133202240499626 \cdot 10^{-143}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r75426 = b;
double r75427 = -r75426;
double r75428 = r75426 * r75426;
double r75429 = 4.0;
double r75430 = a;
double r75431 = r75429 * r75430;
double r75432 = c;
double r75433 = r75431 * r75432;
double r75434 = r75428 - r75433;
double r75435 = sqrt(r75434);
double r75436 = r75427 + r75435;
double r75437 = 2.0;
double r75438 = r75437 * r75430;
double r75439 = r75436 / r75438;
return r75439;
}
double f(double a, double b, double c) {
double r75440 = b;
double r75441 = -8.514236331386388e+118;
bool r75442 = r75440 <= r75441;
double r75443 = 1.0;
double r75444 = c;
double r75445 = r75444 / r75440;
double r75446 = a;
double r75447 = r75440 / r75446;
double r75448 = r75445 - r75447;
double r75449 = r75443 * r75448;
double r75450 = 1.3880700472259379e-143;
bool r75451 = r75440 <= r75450;
double r75452 = 1.0;
double r75453 = 2.0;
double r75454 = r75453 * r75446;
double r75455 = r75440 * r75440;
double r75456 = 4.0;
double r75457 = r75456 * r75446;
double r75458 = r75457 * r75444;
double r75459 = r75455 - r75458;
double r75460 = sqrt(r75459);
double r75461 = r75460 - r75440;
double r75462 = r75454 / r75461;
double r75463 = r75452 / r75462;
double r75464 = -1.0;
double r75465 = r75464 * r75445;
double r75466 = r75451 ? r75463 : r75465;
double r75467 = r75442 ? r75449 : r75466;
return r75467;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 21.5 |
| Herbie | 11.0 |
if b < -8.514236331386388e+118Initial program 51.5
Simplified51.5
Taylor expanded around -inf 2.8
Simplified2.8
if -8.514236331386388e+118 < b < 1.3880700472259379e-143Initial program 11.9
Simplified11.9
rmApplied clear-num12.1
if 1.3880700472259379e-143 < b Initial program 50.3
Simplified50.3
Taylor expanded around inf 12.6
Final simplification11.0
herbie shell --seed 2019351 +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)))