\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 r105205 = b;
double r105206 = -r105205;
double r105207 = r105205 * r105205;
double r105208 = 4.0;
double r105209 = a;
double r105210 = r105208 * r105209;
double r105211 = c;
double r105212 = r105210 * r105211;
double r105213 = r105207 - r105212;
double r105214 = sqrt(r105213);
double r105215 = r105206 + r105214;
double r105216 = 2.0;
double r105217 = r105216 * r105209;
double r105218 = r105215 / r105217;
return r105218;
}
double f(double a, double b, double c) {
double r105219 = b;
double r105220 = -2.2237630570465103e+109;
bool r105221 = r105219 <= r105220;
double r105222 = 1.0;
double r105223 = c;
double r105224 = r105223 / r105219;
double r105225 = a;
double r105226 = r105219 / r105225;
double r105227 = r105224 - r105226;
double r105228 = r105222 * r105227;
double r105229 = -3.3193805664383666e-186;
bool r105230 = r105219 <= r105229;
double r105231 = -r105219;
double r105232 = r105219 * r105219;
double r105233 = 4.0;
double r105234 = r105233 * r105225;
double r105235 = r105234 * r105223;
double r105236 = r105232 - r105235;
double r105237 = sqrt(r105236);
double r105238 = r105231 + r105237;
double r105239 = sqrt(r105238);
double r105240 = 2.0;
double r105241 = r105239 / r105240;
double r105242 = r105239 / r105225;
double r105243 = r105241 * r105242;
double r105244 = 1.458057835821772e+144;
bool r105245 = r105219 <= r105244;
double r105246 = 1.0;
double r105247 = r105240 / r105233;
double r105248 = r105246 / r105247;
double r105249 = r105248 * r105223;
double r105250 = r105231 - r105237;
double r105251 = r105249 / r105250;
double r105252 = -1.0;
double r105253 = r105252 * r105224;
double r105254 = r105245 ? r105251 : r105253;
double r105255 = r105230 ? r105243 : r105254;
double r105256 = r105221 ? r105228 : r105255;
return r105256;
}




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 *-un-lft-identity16.1
Applied *-un-lft-identity16.1
Applied times-frac16.1
Applied associate-/l*16.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
(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)))