\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 -1.369694371126339229257094016308893237032 \cdot 10^{-83}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 2.678238127073728805877873599258558355989 \cdot 10^{53}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-\sqrt[3]{b} \cdot \sqrt[3]{b}, \sqrt[3]{b}, -\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r82408 = b;
double r82409 = -r82408;
double r82410 = r82408 * r82408;
double r82411 = 4.0;
double r82412 = a;
double r82413 = c;
double r82414 = r82412 * r82413;
double r82415 = r82411 * r82414;
double r82416 = r82410 - r82415;
double r82417 = sqrt(r82416);
double r82418 = r82409 - r82417;
double r82419 = 2.0;
double r82420 = r82419 * r82412;
double r82421 = r82418 / r82420;
return r82421;
}
double f(double a, double b, double c) {
double r82422 = b;
double r82423 = -1.3696943711263392e-83;
bool r82424 = r82422 <= r82423;
double r82425 = -1.0;
double r82426 = c;
double r82427 = r82426 / r82422;
double r82428 = r82425 * r82427;
double r82429 = 2.678238127073729e+53;
bool r82430 = r82422 <= r82429;
double r82431 = cbrt(r82422);
double r82432 = r82431 * r82431;
double r82433 = -r82432;
double r82434 = r82422 * r82422;
double r82435 = 4.0;
double r82436 = a;
double r82437 = r82436 * r82426;
double r82438 = r82435 * r82437;
double r82439 = r82434 - r82438;
double r82440 = sqrt(r82439);
double r82441 = -r82440;
double r82442 = fma(r82433, r82431, r82441);
double r82443 = 2.0;
double r82444 = r82443 * r82436;
double r82445 = r82442 / r82444;
double r82446 = 1.0;
double r82447 = r82422 / r82436;
double r82448 = r82427 - r82447;
double r82449 = r82446 * r82448;
double r82450 = r82430 ? r82445 : r82449;
double r82451 = r82424 ? r82428 : r82450;
return r82451;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.8 |
|---|---|
| Target | 20.8 |
| Herbie | 10.2 |
if b < -1.3696943711263392e-83Initial program 53.2
Taylor expanded around -inf 9.4
if -1.3696943711263392e-83 < b < 2.678238127073729e+53Initial program 12.8
rmApplied add-cube-cbrt13.0
Applied distribute-lft-neg-in13.0
Applied fma-neg13.0
if 2.678238127073729e+53 < b Initial program 38.1
Taylor expanded around inf 5.7
Simplified5.7
Final simplification10.2
herbie shell --seed 2019362 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
: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)))