\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.397994825724217 \cdot 10^{+150}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 1.2158870426682226 \cdot 10^{-82}:\\
\;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(b, b, \left(-4 \cdot c\right) \cdot a\right)} - b}}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r3298396 = b;
double r3298397 = -r3298396;
double r3298398 = r3298396 * r3298396;
double r3298399 = 4.0;
double r3298400 = a;
double r3298401 = r3298399 * r3298400;
double r3298402 = c;
double r3298403 = r3298401 * r3298402;
double r3298404 = r3298398 - r3298403;
double r3298405 = sqrt(r3298404);
double r3298406 = r3298397 + r3298405;
double r3298407 = 2.0;
double r3298408 = r3298407 * r3298400;
double r3298409 = r3298406 / r3298408;
return r3298409;
}
double f(double a, double b, double c) {
double r3298410 = b;
double r3298411 = -7.397994825724217e+150;
bool r3298412 = r3298410 <= r3298411;
double r3298413 = c;
double r3298414 = r3298413 / r3298410;
double r3298415 = a;
double r3298416 = r3298410 / r3298415;
double r3298417 = r3298414 - r3298416;
double r3298418 = 2.0;
double r3298419 = r3298417 * r3298418;
double r3298420 = r3298419 / r3298418;
double r3298421 = 1.2158870426682226e-82;
bool r3298422 = r3298410 <= r3298421;
double r3298423 = 1.0;
double r3298424 = -4.0;
double r3298425 = r3298424 * r3298413;
double r3298426 = r3298425 * r3298415;
double r3298427 = fma(r3298410, r3298410, r3298426);
double r3298428 = sqrt(r3298427);
double r3298429 = r3298428 - r3298410;
double r3298430 = r3298415 / r3298429;
double r3298431 = r3298423 / r3298430;
double r3298432 = r3298431 / r3298418;
double r3298433 = -2.0;
double r3298434 = r3298433 * r3298414;
double r3298435 = r3298434 / r3298418;
double r3298436 = r3298422 ? r3298432 : r3298435;
double r3298437 = r3298412 ? r3298420 : r3298436;
return r3298437;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.2 |
|---|---|
| Target | 20.6 |
| Herbie | 10.0 |
if b < -7.397994825724217e+150Initial program 59.1
Simplified59.1
rmApplied associate-*l*59.1
Taylor expanded around -inf 2.2
Simplified2.2
if -7.397994825724217e+150 < b < 1.2158870426682226e-82Initial program 11.8
Simplified11.8
rmApplied associate-*l*11.7
rmApplied clear-num11.9
if 1.2158870426682226e-82 < b Initial program 52.3
Simplified52.3
rmApplied associate-*l*52.3
Taylor expanded around inf 9.9
Final simplification10.0
herbie shell --seed 2019162 +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)))