\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 r151263 = b;
double r151264 = -r151263;
double r151265 = r151263 * r151263;
double r151266 = 4.0;
double r151267 = a;
double r151268 = r151266 * r151267;
double r151269 = c;
double r151270 = r151268 * r151269;
double r151271 = r151265 - r151270;
double r151272 = sqrt(r151271);
double r151273 = r151264 + r151272;
double r151274 = 2.0;
double r151275 = r151274 * r151267;
double r151276 = r151273 / r151275;
return r151276;
}
double f(double a, double b, double c) {
double r151277 = b;
double r151278 = -2.2237630570465103e+109;
bool r151279 = r151277 <= r151278;
double r151280 = 1.0;
double r151281 = c;
double r151282 = r151281 / r151277;
double r151283 = a;
double r151284 = r151277 / r151283;
double r151285 = r151282 - r151284;
double r151286 = r151280 * r151285;
double r151287 = -3.3193805664383666e-186;
bool r151288 = r151277 <= r151287;
double r151289 = -r151277;
double r151290 = r151277 * r151277;
double r151291 = 4.0;
double r151292 = r151291 * r151283;
double r151293 = r151292 * r151281;
double r151294 = r151290 - r151293;
double r151295 = sqrt(r151294);
double r151296 = r151289 + r151295;
double r151297 = sqrt(r151296);
double r151298 = 2.0;
double r151299 = r151297 / r151298;
double r151300 = r151297 / r151283;
double r151301 = r151299 * r151300;
double r151302 = 1.458057835821772e+144;
bool r151303 = r151277 <= r151302;
double r151304 = 1.0;
double r151305 = r151298 / r151291;
double r151306 = r151304 / r151305;
double r151307 = r151306 * r151281;
double r151308 = r151289 - r151295;
double r151309 = r151307 / r151308;
double r151310 = -1.0;
double r151311 = r151310 * r151282;
double r151312 = r151303 ? r151309 : r151311;
double r151313 = r151288 ? r151301 : r151312;
double r151314 = r151279 ? r151286 : r151313;
return r151314;
}




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)))