\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.223763057046510327568967152287533282505 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.319380566438366601816459280349243307141 \cdot 10^{-186}:\\
\;\;\;\;\frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2} \cdot \frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{a}\\
\mathbf{elif}\;b \le 1.458057835821772074616178333218437979276 \cdot 10^{144}:\\
\;\;\;\;\frac{\frac{1}{\frac{2}{4}} \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r153275 = b;
double r153276 = -r153275;
double r153277 = r153275 * r153275;
double r153278 = 4.0;
double r153279 = a;
double r153280 = r153278 * r153279;
double r153281 = c;
double r153282 = r153280 * r153281;
double r153283 = r153277 - r153282;
double r153284 = sqrt(r153283);
double r153285 = r153276 + r153284;
double r153286 = 2.0;
double r153287 = r153286 * r153279;
double r153288 = r153285 / r153287;
return r153288;
}
double f(double a, double b, double c) {
double r153289 = b;
double r153290 = -2.2237630570465103e+109;
bool r153291 = r153289 <= r153290;
double r153292 = 1.0;
double r153293 = c;
double r153294 = r153293 / r153289;
double r153295 = a;
double r153296 = r153289 / r153295;
double r153297 = r153294 - r153296;
double r153298 = r153292 * r153297;
double r153299 = -3.3193805664383666e-186;
bool r153300 = r153289 <= r153299;
double r153301 = -r153289;
double r153302 = r153289 * r153289;
double r153303 = 4.0;
double r153304 = r153303 * r153295;
double r153305 = r153304 * r153293;
double r153306 = r153302 - r153305;
double r153307 = sqrt(r153306);
double r153308 = r153301 + r153307;
double r153309 = sqrt(r153308);
double r153310 = 2.0;
double r153311 = r153309 / r153310;
double r153312 = r153309 / r153295;
double r153313 = r153311 * r153312;
double r153314 = 1.458057835821772e+144;
bool r153315 = r153289 <= r153314;
double r153316 = 1.0;
double r153317 = r153310 / r153303;
double r153318 = r153316 / r153317;
double r153319 = r153318 * r153293;
double r153320 = r153301 - r153307;
double r153321 = r153319 / r153320;
double r153322 = -1.0;
double r153323 = r153322 * r153294;
double r153324 = r153315 ? r153321 : r153323;
double r153325 = r153300 ? r153313 : r153324;
double r153326 = r153291 ? r153298 : r153325;
return r153326;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 6.7 |
if b < -2.2237630570465103e+109Initial program 48.6
Taylor expanded around -inf 3.3
Simplified3.3
if -2.2237630570465103e+109 < b < -3.3193805664383666e-186Initial program 6.9
rmApplied add-sqr-sqrt7.3
Applied times-frac7.3
if -3.3193805664383666e-186 < b < 1.458057835821772e+144Initial program 31.3
rmApplied flip-+31.5
Simplified16.1
rmApplied clear-num16.3
Simplified15.3
rmApplied times-frac15.3
Simplified10.2
rmApplied associate-/r*9.9
Simplified9.8
if 1.458057835821772e+144 < b Initial program 62.9
Taylor expanded around inf 1.5
Final simplification6.7
herbie shell --seed 2020001 +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)))