\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.02738286211209785784187544728837722875 \cdot 10^{63}:\\
\;\;\;\;\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 r160575 = b;
double r160576 = -r160575;
double r160577 = r160575 * r160575;
double r160578 = 4.0;
double r160579 = a;
double r160580 = r160578 * r160579;
double r160581 = c;
double r160582 = r160580 * r160581;
double r160583 = r160577 - r160582;
double r160584 = sqrt(r160583);
double r160585 = r160576 + r160584;
double r160586 = 2.0;
double r160587 = r160586 * r160579;
double r160588 = r160585 / r160587;
return r160588;
}
double f(double a, double b, double c) {
double r160589 = b;
double r160590 = -2.2237630570465103e+109;
bool r160591 = r160589 <= r160590;
double r160592 = 1.0;
double r160593 = c;
double r160594 = r160593 / r160589;
double r160595 = a;
double r160596 = r160589 / r160595;
double r160597 = r160594 - r160596;
double r160598 = r160592 * r160597;
double r160599 = -3.3193805664383666e-186;
bool r160600 = r160589 <= r160599;
double r160601 = -r160589;
double r160602 = r160589 * r160589;
double r160603 = 4.0;
double r160604 = r160603 * r160595;
double r160605 = r160604 * r160593;
double r160606 = r160602 - r160605;
double r160607 = sqrt(r160606);
double r160608 = r160601 + r160607;
double r160609 = sqrt(r160608);
double r160610 = 2.0;
double r160611 = r160609 / r160610;
double r160612 = r160609 / r160595;
double r160613 = r160611 * r160612;
double r160614 = 1.0273828621120979e+63;
bool r160615 = r160589 <= r160614;
double r160616 = 1.0;
double r160617 = r160610 / r160603;
double r160618 = r160616 / r160617;
double r160619 = r160616 / r160593;
double r160620 = r160618 / r160619;
double r160621 = r160601 - r160607;
double r160622 = r160620 / r160621;
double r160623 = -1.0;
double r160624 = r160623 * r160594;
double r160625 = r160615 ? r160622 : r160624;
double r160626 = r160600 ? r160613 : r160625;
double r160627 = r160591 ? r160598 : r160626;
return r160627;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 7.0 |
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.0273828621120979e+63Initial program 27.5
rmApplied flip-+27.7
Simplified17.0
rmApplied *-un-lft-identity17.0
Applied *-un-lft-identity17.0
Applied times-frac17.0
Applied associate-/l*17.1
Simplified16.8
rmApplied times-frac16.8
Simplified11.2
rmApplied associate-/r*11.0
Simplified11.0
if 1.0273828621120979e+63 < b Initial program 57.7
Taylor expanded around inf 3.8
Final simplification7.0
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)))