\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{\frac{{b}^{2} + 4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b + \left(4 \cdot a\right) \cdot c}} \cdot \frac{{b}^{2} - 4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b + \left(4 \cdot a\right) \cdot c}}}}}{2 \cdot a}double f(double a, double b, double c) {
double r38363 = b;
double r38364 = -r38363;
double r38365 = r38363 * r38363;
double r38366 = 4.0;
double r38367 = a;
double r38368 = r38366 * r38367;
double r38369 = c;
double r38370 = r38368 * r38369;
double r38371 = r38365 - r38370;
double r38372 = sqrt(r38371);
double r38373 = r38364 + r38372;
double r38374 = 2.0;
double r38375 = r38374 * r38367;
double r38376 = r38373 / r38375;
return r38376;
}
double f(double a, double b, double c) {
double r38377 = 0.0;
double r38378 = 4.0;
double r38379 = a;
double r38380 = c;
double r38381 = r38379 * r38380;
double r38382 = r38378 * r38381;
double r38383 = r38377 + r38382;
double r38384 = b;
double r38385 = -r38384;
double r38386 = 2.0;
double r38387 = pow(r38384, r38386);
double r38388 = r38387 + r38382;
double r38389 = r38384 * r38384;
double r38390 = r38378 * r38379;
double r38391 = r38390 * r38380;
double r38392 = r38389 + r38391;
double r38393 = sqrt(r38392);
double r38394 = r38388 / r38393;
double r38395 = r38387 - r38382;
double r38396 = r38395 / r38393;
double r38397 = r38394 * r38396;
double r38398 = sqrt(r38397);
double r38399 = r38385 - r38398;
double r38400 = r38383 / r38399;
double r38401 = 2.0;
double r38402 = r38401 * r38379;
double r38403 = r38400 / r38402;
return r38403;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.7
rmApplied flip-+43.7
Simplified0.4
rmApplied flip--0.4
Simplified0.4
rmApplied add-sqr-sqrt0.4
Applied sqr-pow0.4
Applied difference-of-squares0.4
Applied times-frac0.4
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020062
(FPCore (a b c)
:name "Quadratic roots, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))