\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 -2.568201128637223695690583924646661116118 \cdot 10^{55}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -4.546128927832045171835550197132658970541 \cdot 10^{-301}:\\
\;\;\;\;\frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{\frac{2 \cdot a}{\sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}\\
\mathbf{elif}\;b \le 9.748353205521284417498320088314179968082 \cdot 10^{77}:\\
\;\;\;\;\frac{\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r150314 = b;
double r150315 = -r150314;
double r150316 = r150314 * r150314;
double r150317 = 4.0;
double r150318 = a;
double r150319 = r150317 * r150318;
double r150320 = c;
double r150321 = r150319 * r150320;
double r150322 = r150316 - r150321;
double r150323 = sqrt(r150322);
double r150324 = r150315 + r150323;
double r150325 = 2.0;
double r150326 = r150325 * r150318;
double r150327 = r150324 / r150326;
return r150327;
}
double f(double a, double b, double c) {
double r150328 = b;
double r150329 = -2.5682011286372237e+55;
bool r150330 = r150328 <= r150329;
double r150331 = 1.0;
double r150332 = c;
double r150333 = r150332 / r150328;
double r150334 = a;
double r150335 = r150328 / r150334;
double r150336 = r150333 - r150335;
double r150337 = r150331 * r150336;
double r150338 = -4.546128927832045e-301;
bool r150339 = r150328 <= r150338;
double r150340 = -r150328;
double r150341 = r150328 * r150328;
double r150342 = 4.0;
double r150343 = r150342 * r150334;
double r150344 = r150343 * r150332;
double r150345 = r150341 - r150344;
double r150346 = sqrt(r150345);
double r150347 = r150340 + r150346;
double r150348 = sqrt(r150347);
double r150349 = 2.0;
double r150350 = r150349 * r150334;
double r150351 = r150350 / r150348;
double r150352 = r150348 / r150351;
double r150353 = 9.748353205521284e+77;
bool r150354 = r150328 <= r150353;
double r150355 = 0.0;
double r150356 = r150334 * r150332;
double r150357 = r150342 * r150356;
double r150358 = r150355 + r150357;
double r150359 = r150340 - r150346;
double r150360 = r150358 / r150359;
double r150361 = r150360 / r150350;
double r150362 = -1.0;
double r150363 = r150362 * r150333;
double r150364 = r150354 ? r150361 : r150363;
double r150365 = r150339 ? r150352 : r150364;
double r150366 = r150330 ? r150337 : r150365;
return r150366;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.0 |
| Herbie | 9.1 |
if b < -2.5682011286372237e+55Initial program 38.3
Taylor expanded around -inf 5.4
Simplified5.4
if -2.5682011286372237e+55 < b < -4.546128927832045e-301Initial program 9.5
rmApplied add-sqr-sqrt9.8
Applied associate-/l*9.9
if -4.546128927832045e-301 < b < 9.748353205521284e+77Initial program 31.3
rmApplied flip-+31.4
Simplified16.8
if 9.748353205521284e+77 < b Initial program 58.3
Taylor expanded around inf 2.8
Final simplification9.1
herbie shell --seed 2019346 +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)))