\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 -9.088000531423294 \cdot 10^{+152}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 9.354082991670835 \cdot 10^{-125}:\\
\;\;\;\;\frac{\left(\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} - b\right) \cdot \frac{1}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-c}{b}\\
\end{array}double f(double a, double b, double c) {
double r1371234 = b;
double r1371235 = -r1371234;
double r1371236 = r1371234 * r1371234;
double r1371237 = 4.0;
double r1371238 = a;
double r1371239 = r1371237 * r1371238;
double r1371240 = c;
double r1371241 = r1371239 * r1371240;
double r1371242 = r1371236 - r1371241;
double r1371243 = sqrt(r1371242);
double r1371244 = r1371235 + r1371243;
double r1371245 = 2.0;
double r1371246 = r1371245 * r1371238;
double r1371247 = r1371244 / r1371246;
return r1371247;
}
double f(double a, double b, double c) {
double r1371248 = b;
double r1371249 = -9.088000531423294e+152;
bool r1371250 = r1371248 <= r1371249;
double r1371251 = c;
double r1371252 = r1371251 / r1371248;
double r1371253 = a;
double r1371254 = r1371248 / r1371253;
double r1371255 = r1371252 - r1371254;
double r1371256 = 9.354082991670835e-125;
bool r1371257 = r1371248 <= r1371256;
double r1371258 = -4.0;
double r1371259 = r1371253 * r1371258;
double r1371260 = r1371248 * r1371248;
double r1371261 = fma(r1371259, r1371251, r1371260);
double r1371262 = sqrt(r1371261);
double r1371263 = r1371262 - r1371248;
double r1371264 = 0.5;
double r1371265 = r1371263 * r1371264;
double r1371266 = r1371265 / r1371253;
double r1371267 = -r1371251;
double r1371268 = r1371267 / r1371248;
double r1371269 = r1371257 ? r1371266 : r1371268;
double r1371270 = r1371250 ? r1371255 : r1371269;
return r1371270;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 32.9 |
|---|---|
| Target | 20.3 |
| Herbie | 10.3 |
if b < -9.088000531423294e+152Initial program 60.4
Simplified60.4
Taylor expanded around -inf 1.5
if -9.088000531423294e+152 < b < 9.354082991670835e-125Initial program 10.9
Simplified10.9
rmApplied *-un-lft-identity10.9
Applied div-inv11.1
Applied times-frac11.1
Simplified11.1
Simplified11.1
rmApplied associate-*r/10.9
if 9.354082991670835e-125 < b Initial program 49.8
Simplified49.8
Taylor expanded around inf 11.9
Simplified11.9
Final simplification10.3
herbie shell --seed 2019153 +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)))