\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -2.4105949946140778 \cdot 10^{+148}:\\
\;\;\;\;\frac{-c}{b}\\
\mathbf{elif}\;b \le -1.7020775143638545 \cdot 10^{-308}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} + \left(-b\right)}\\
\mathbf{elif}\;b \le 4.2298575609145854 \cdot 10^{+96}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-b}{a}\\
\end{array}double f(double a, double b, double c) {
double r6546249 = b;
double r6546250 = -r6546249;
double r6546251 = r6546249 * r6546249;
double r6546252 = 4.0;
double r6546253 = a;
double r6546254 = c;
double r6546255 = r6546253 * r6546254;
double r6546256 = r6546252 * r6546255;
double r6546257 = r6546251 - r6546256;
double r6546258 = sqrt(r6546257);
double r6546259 = r6546250 - r6546258;
double r6546260 = 2.0;
double r6546261 = r6546260 * r6546253;
double r6546262 = r6546259 / r6546261;
return r6546262;
}
double f(double a, double b, double c) {
double r6546263 = b;
double r6546264 = -2.4105949946140778e+148;
bool r6546265 = r6546263 <= r6546264;
double r6546266 = c;
double r6546267 = -r6546266;
double r6546268 = r6546267 / r6546263;
double r6546269 = -1.7020775143638545e-308;
bool r6546270 = r6546263 <= r6546269;
double r6546271 = 2.0;
double r6546272 = r6546271 * r6546266;
double r6546273 = r6546263 * r6546263;
double r6546274 = 4.0;
double r6546275 = a;
double r6546276 = r6546266 * r6546275;
double r6546277 = r6546274 * r6546276;
double r6546278 = r6546273 - r6546277;
double r6546279 = sqrt(r6546278);
double r6546280 = -r6546263;
double r6546281 = r6546279 + r6546280;
double r6546282 = r6546272 / r6546281;
double r6546283 = 4.2298575609145854e+96;
bool r6546284 = r6546263 <= r6546283;
double r6546285 = r6546280 - r6546279;
double r6546286 = r6546275 * r6546271;
double r6546287 = r6546285 / r6546286;
double r6546288 = r6546280 / r6546275;
double r6546289 = r6546284 ? r6546287 : r6546288;
double r6546290 = r6546270 ? r6546282 : r6546289;
double r6546291 = r6546265 ? r6546268 : r6546290;
return r6546291;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.6 |
|---|---|
| Target | 20.7 |
| Herbie | 6.3 |
if b < -2.4105949946140778e+148Initial program 62.4
Taylor expanded around -inf 1.3
Simplified1.3
if -2.4105949946140778e+148 < b < -1.7020775143638545e-308Initial program 35.1
rmApplied div-inv35.2
rmApplied flip--35.3
Applied associate-*l/35.3
Simplified14.5
Taylor expanded around 0 8.1
if -1.7020775143638545e-308 < b < 4.2298575609145854e+96Initial program 8.3
rmApplied div-inv8.5
rmApplied un-div-inv8.3
if 4.2298575609145854e+96 < b Initial program 43.5
rmApplied div-inv43.6
rmApplied flip--61.5
Applied associate-*l/61.5
Simplified61.6
Taylor expanded around 0 61.5
Taylor expanded around 0 4.1
Simplified4.1
Final simplification6.3
herbie shell --seed 2019104
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))