\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.6038168240882645 \cdot 10^{144}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.2731438419880699 \cdot 10^{-203}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\mathbf{elif}\;b \le 2.1125387673008883 \cdot 10^{122}:\\
\;\;\;\;\frac{\frac{\frac{1}{\frac{2}{4}}}{\frac{1}{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 r292375 = b;
double r292376 = -r292375;
double r292377 = r292375 * r292375;
double r292378 = 4.0;
double r292379 = a;
double r292380 = r292378 * r292379;
double r292381 = c;
double r292382 = r292380 * r292381;
double r292383 = r292377 - r292382;
double r292384 = sqrt(r292383);
double r292385 = r292376 + r292384;
double r292386 = 2.0;
double r292387 = r292386 * r292379;
double r292388 = r292385 / r292387;
return r292388;
}
double f(double a, double b, double c) {
double r292389 = b;
double r292390 = -7.603816824088264e+144;
bool r292391 = r292389 <= r292390;
double r292392 = 1.0;
double r292393 = c;
double r292394 = r292393 / r292389;
double r292395 = a;
double r292396 = r292389 / r292395;
double r292397 = r292394 - r292396;
double r292398 = r292392 * r292397;
double r292399 = -3.27314384198807e-203;
bool r292400 = r292389 <= r292399;
double r292401 = -r292389;
double r292402 = r292389 * r292389;
double r292403 = 4.0;
double r292404 = r292403 * r292395;
double r292405 = r292404 * r292393;
double r292406 = r292402 - r292405;
double r292407 = sqrt(r292406);
double r292408 = sqrt(r292407);
double r292409 = r292408 * r292408;
double r292410 = r292401 + r292409;
double r292411 = 2.0;
double r292412 = r292411 * r292395;
double r292413 = r292410 / r292412;
double r292414 = 2.1125387673008883e+122;
bool r292415 = r292389 <= r292414;
double r292416 = 1.0;
double r292417 = r292411 / r292403;
double r292418 = r292416 / r292417;
double r292419 = r292416 / r292393;
double r292420 = r292418 / r292419;
double r292421 = r292401 - r292407;
double r292422 = r292420 / r292421;
double r292423 = -1.0;
double r292424 = r292423 * r292394;
double r292425 = r292415 ? r292422 : r292424;
double r292426 = r292400 ? r292413 : r292425;
double r292427 = r292391 ? r292398 : r292426;
return r292427;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.2 |
| Herbie | 6.5 |
if b < -7.603816824088264e+144Initial program 61.2
Taylor expanded around -inf 2.8
Simplified2.8
if -7.603816824088264e+144 < b < -3.27314384198807e-203Initial program 7.1
rmApplied add-sqr-sqrt7.1
Applied sqrt-prod7.4
if -3.27314384198807e-203 < b < 2.1125387673008883e+122Initial program 29.8
rmApplied flip-+29.9
Simplified16.2
rmApplied *-un-lft-identity16.2
Applied *-un-lft-identity16.2
Applied times-frac16.2
Applied associate-/l*16.3
Simplified15.5
rmApplied associate-/r*15.3
Simplified9.5
if 2.1125387673008883e+122 < b Initial program 61.1
Taylor expanded around inf 2.1
Final simplification6.5
herbie shell --seed 2020036
(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)))