\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 -5.10985616674947893 \cdot 10^{57}:\\
\;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \frac{c}{b}\right)\\
\mathbf{elif}\;b \le -1.33116871382552448 \cdot 10^{-114}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{\mathsf{fma}\left(1, \sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)}, -b\right)}}{a}\\
\mathbf{elif}\;b \le 6.74838527698993 \cdot 10^{90}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{1}{\frac{a}{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)}}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r89508 = b;
double r89509 = -r89508;
double r89510 = r89508 * r89508;
double r89511 = 4.0;
double r89512 = a;
double r89513 = c;
double r89514 = r89512 * r89513;
double r89515 = r89511 * r89514;
double r89516 = r89510 - r89515;
double r89517 = sqrt(r89516);
double r89518 = r89509 - r89517;
double r89519 = 2.0;
double r89520 = r89519 * r89512;
double r89521 = r89518 / r89520;
return r89521;
}
double f(double a, double b, double c) {
double r89522 = b;
double r89523 = -5.109856166749479e+57;
bool r89524 = r89522 <= r89523;
double r89525 = 1.0;
double r89526 = 2.0;
double r89527 = r89525 / r89526;
double r89528 = -2.0;
double r89529 = c;
double r89530 = r89529 / r89522;
double r89531 = r89528 * r89530;
double r89532 = r89527 * r89531;
double r89533 = -1.3311687138255245e-114;
bool r89534 = r89522 <= r89533;
double r89535 = 4.0;
double r89536 = a;
double r89537 = r89536 * r89529;
double r89538 = r89535 * r89537;
double r89539 = -r89538;
double r89540 = fma(r89522, r89522, r89539);
double r89541 = sqrt(r89540);
double r89542 = -r89522;
double r89543 = fma(r89525, r89541, r89542);
double r89544 = r89538 / r89543;
double r89545 = r89544 / r89536;
double r89546 = r89527 * r89545;
double r89547 = 6.74838527698993e+90;
bool r89548 = r89522 <= r89547;
double r89549 = r89542 - r89541;
double r89550 = r89536 / r89549;
double r89551 = r89525 / r89550;
double r89552 = r89527 * r89551;
double r89553 = -1.0;
double r89554 = r89522 / r89536;
double r89555 = r89553 * r89554;
double r89556 = r89548 ? r89552 : r89555;
double r89557 = r89534 ? r89546 : r89556;
double r89558 = r89524 ? r89532 : r89557;
return r89558;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.4 |
|---|---|
| Target | 21.3 |
| Herbie | 9.0 |
if b < -5.109856166749479e+57Initial program 58.0
rmApplied clear-num58.0
rmApplied *-un-lft-identity58.0
Applied times-frac58.0
Applied add-cube-cbrt58.0
Applied times-frac58.0
Simplified58.0
Simplified58.0
Taylor expanded around -inf 3.4
if -5.109856166749479e+57 < b < -1.3311687138255245e-114Initial program 41.3
rmApplied clear-num41.3
rmApplied *-un-lft-identity41.3
Applied times-frac41.3
Applied add-cube-cbrt41.3
Applied times-frac41.3
Simplified41.3
Simplified41.3
rmApplied flip--41.3
Simplified16.4
Simplified16.4
rmApplied *-un-lft-identity16.4
Applied fma-neg16.4
if -1.3311687138255245e-114 < b < 6.74838527698993e+90Initial program 11.9
rmApplied clear-num12.0
rmApplied *-un-lft-identity12.0
Applied times-frac12.0
Applied add-cube-cbrt12.0
Applied times-frac12.0
Simplified12.0
Simplified11.9
rmApplied clear-num12.0
if 6.74838527698993e+90 < b Initial program 45.7
rmApplied clear-num45.8
Taylor expanded around 0 4.6
Final simplification9.0
herbie shell --seed 2020042 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))