\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 r93225 = b;
double r93226 = -r93225;
double r93227 = r93225 * r93225;
double r93228 = 4.0;
double r93229 = a;
double r93230 = r93228 * r93229;
double r93231 = c;
double r93232 = r93230 * r93231;
double r93233 = r93227 - r93232;
double r93234 = sqrt(r93233);
double r93235 = r93226 + r93234;
double r93236 = 2.0;
double r93237 = r93236 * r93229;
double r93238 = r93235 / r93237;
return r93238;
}
double f(double a, double b, double c) {
double r93239 = b;
double r93240 = -2.2237630570465103e+109;
bool r93241 = r93239 <= r93240;
double r93242 = 1.0;
double r93243 = c;
double r93244 = r93243 / r93239;
double r93245 = a;
double r93246 = r93239 / r93245;
double r93247 = r93244 - r93246;
double r93248 = r93242 * r93247;
double r93249 = -3.3193805664383666e-186;
bool r93250 = r93239 <= r93249;
double r93251 = -r93239;
double r93252 = r93239 * r93239;
double r93253 = 4.0;
double r93254 = r93253 * r93245;
double r93255 = r93254 * r93243;
double r93256 = r93252 - r93255;
double r93257 = sqrt(r93256);
double r93258 = r93251 + r93257;
double r93259 = sqrt(r93258);
double r93260 = 2.0;
double r93261 = r93259 / r93260;
double r93262 = r93259 / r93245;
double r93263 = r93261 * r93262;
double r93264 = 1.0273828621120979e+63;
bool r93265 = r93239 <= r93264;
double r93266 = 1.0;
double r93267 = r93260 / r93253;
double r93268 = r93266 / r93267;
double r93269 = r93266 / r93243;
double r93270 = r93268 / r93269;
double r93271 = r93251 - r93257;
double r93272 = r93270 / r93271;
double r93273 = -1.0;
double r93274 = r93273 * r93244;
double r93275 = r93265 ? r93272 : r93274;
double r93276 = r93250 ? r93263 : r93275;
double r93277 = r93241 ? r93248 : r93276;
return r93277;
}




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