\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 -1.7431685240570133 \cdot 10^{102}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.0417939395900796 \cdot 10^{-259}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{elif}\;b \le 9.37351117144741807 \cdot 10^{103}:\\
\;\;\;\;\frac{1}{\frac{\frac{2}{4}}{c} \cdot \left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right)} \cdot \frac{\frac{1}{\sqrt[3]{1}}}{\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 r114310 = b;
double r114311 = -r114310;
double r114312 = r114310 * r114310;
double r114313 = 4.0;
double r114314 = a;
double r114315 = r114313 * r114314;
double r114316 = c;
double r114317 = r114315 * r114316;
double r114318 = r114312 - r114317;
double r114319 = sqrt(r114318);
double r114320 = r114311 + r114319;
double r114321 = 2.0;
double r114322 = r114321 * r114314;
double r114323 = r114320 / r114322;
return r114323;
}
double f(double a, double b, double c) {
double r114324 = b;
double r114325 = -1.7431685240570133e+102;
bool r114326 = r114324 <= r114325;
double r114327 = 1.0;
double r114328 = c;
double r114329 = r114328 / r114324;
double r114330 = a;
double r114331 = r114324 / r114330;
double r114332 = r114329 - r114331;
double r114333 = r114327 * r114332;
double r114334 = 1.0417939395900796e-259;
bool r114335 = r114324 <= r114334;
double r114336 = -r114324;
double r114337 = r114324 * r114324;
double r114338 = 4.0;
double r114339 = r114338 * r114330;
double r114340 = r114339 * r114328;
double r114341 = r114337 - r114340;
double r114342 = sqrt(r114341);
double r114343 = r114336 + r114342;
double r114344 = 2.0;
double r114345 = r114344 * r114330;
double r114346 = r114343 / r114345;
double r114347 = 9.373511171447418e+103;
bool r114348 = r114324 <= r114347;
double r114349 = 1.0;
double r114350 = r114344 / r114338;
double r114351 = r114350 / r114328;
double r114352 = cbrt(r114349);
double r114353 = r114352 * r114352;
double r114354 = r114351 * r114353;
double r114355 = r114349 / r114354;
double r114356 = r114349 / r114352;
double r114357 = r114336 - r114342;
double r114358 = r114356 / r114357;
double r114359 = r114355 * r114358;
double r114360 = -1.0;
double r114361 = r114360 * r114329;
double r114362 = r114348 ? r114359 : r114361;
double r114363 = r114335 ? r114346 : r114362;
double r114364 = r114326 ? r114333 : r114363;
return r114364;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.5 |
| Herbie | 6.5 |
if b < -1.7431685240570133e+102Initial program 47.5
Taylor expanded around -inf 3.1
Simplified3.1
if -1.7431685240570133e+102 < b < 1.0417939395900796e-259Initial program 9.7
if 1.0417939395900796e-259 < b < 9.373511171447418e+103Initial program 34.9
rmApplied flip-+35.0
Simplified17.0
rmApplied *-un-lft-identity17.0
Applied *-un-lft-identity17.0
Applied times-frac17.0
Applied associate-/l*17.3
Simplified16.1
rmApplied times-frac16.1
Simplified8.3
rmApplied add-cube-cbrt8.3
Applied add-sqr-sqrt8.3
Applied times-frac8.3
Applied times-frac7.9
Simplified7.9
Simplified7.9
if 9.373511171447418e+103 < b Initial program 59.9
Taylor expanded around inf 2.3
Final simplification6.5
herbie shell --seed 2020024 +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)))