\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 r92184 = b;
double r92185 = -r92184;
double r92186 = r92184 * r92184;
double r92187 = 4.0;
double r92188 = a;
double r92189 = r92187 * r92188;
double r92190 = c;
double r92191 = r92189 * r92190;
double r92192 = r92186 - r92191;
double r92193 = sqrt(r92192);
double r92194 = r92185 + r92193;
double r92195 = 2.0;
double r92196 = r92195 * r92188;
double r92197 = r92194 / r92196;
return r92197;
}
double f(double a, double b, double c) {
double r92198 = b;
double r92199 = -2.2237630570465103e+109;
bool r92200 = r92198 <= r92199;
double r92201 = 1.0;
double r92202 = c;
double r92203 = r92202 / r92198;
double r92204 = a;
double r92205 = r92198 / r92204;
double r92206 = r92203 - r92205;
double r92207 = r92201 * r92206;
double r92208 = -3.3193805664383666e-186;
bool r92209 = r92198 <= r92208;
double r92210 = -r92198;
double r92211 = r92198 * r92198;
double r92212 = 4.0;
double r92213 = r92212 * r92204;
double r92214 = r92213 * r92202;
double r92215 = r92211 - r92214;
double r92216 = sqrt(r92215);
double r92217 = r92210 + r92216;
double r92218 = sqrt(r92217);
double r92219 = 2.0;
double r92220 = r92218 / r92219;
double r92221 = r92218 / r92204;
double r92222 = r92220 * r92221;
double r92223 = 1.458057835821772e+144;
bool r92224 = r92198 <= r92223;
double r92225 = 1.0;
double r92226 = r92219 / r92212;
double r92227 = r92225 / r92226;
double r92228 = r92227 * r92202;
double r92229 = r92210 - r92216;
double r92230 = r92228 / r92229;
double r92231 = -1.0;
double r92232 = r92231 * r92203;
double r92233 = r92224 ? r92230 : r92232;
double r92234 = r92209 ? r92222 : r92233;
double r92235 = r92200 ? r92207 : r92234;
return r92235;
}




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