\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 -5.674469085146396739103610609439188639717 \cdot 10^{110}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 7.061692521831335565675525372535211636164 \cdot 10^{-266}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)} - b}\\
\mathbf{elif}\;b \le 1.715181108188238274259588142060201574853 \cdot 10^{78}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r68304 = b;
double r68305 = -r68304;
double r68306 = r68304 * r68304;
double r68307 = 4.0;
double r68308 = a;
double r68309 = c;
double r68310 = r68308 * r68309;
double r68311 = r68307 * r68310;
double r68312 = r68306 - r68311;
double r68313 = sqrt(r68312);
double r68314 = r68305 - r68313;
double r68315 = 2.0;
double r68316 = r68315 * r68308;
double r68317 = r68314 / r68316;
return r68317;
}
double f(double a, double b, double c) {
double r68318 = b;
double r68319 = -5.674469085146397e+110;
bool r68320 = r68318 <= r68319;
double r68321 = -1.0;
double r68322 = c;
double r68323 = r68322 / r68318;
double r68324 = r68321 * r68323;
double r68325 = 7.061692521831336e-266;
bool r68326 = r68318 <= r68325;
double r68327 = 2.0;
double r68328 = r68327 * r68322;
double r68329 = 4.0;
double r68330 = a;
double r68331 = r68330 * r68322;
double r68332 = r68329 * r68331;
double r68333 = -r68332;
double r68334 = fma(r68318, r68318, r68333);
double r68335 = sqrt(r68334);
double r68336 = r68335 - r68318;
double r68337 = r68328 / r68336;
double r68338 = 1.7151811081882383e+78;
bool r68339 = r68318 <= r68338;
double r68340 = 1.0;
double r68341 = r68340 / r68327;
double r68342 = -r68318;
double r68343 = r68318 * r68318;
double r68344 = r68343 - r68332;
double r68345 = sqrt(r68344);
double r68346 = r68342 - r68345;
double r68347 = r68346 / r68330;
double r68348 = r68341 * r68347;
double r68349 = r68318 / r68330;
double r68350 = r68321 * r68349;
double r68351 = r68339 ? r68348 : r68350;
double r68352 = r68326 ? r68337 : r68351;
double r68353 = r68320 ? r68324 : r68352;
return r68353;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.9 |
|---|---|
| Target | 21.0 |
| Herbie | 6.7 |
if b < -5.674469085146397e+110Initial program 59.7
Taylor expanded around -inf 2.7
if -5.674469085146397e+110 < b < 7.061692521831336e-266Initial program 31.8
rmApplied flip--31.8
Simplified16.1
Simplified16.1
rmApplied div-inv16.1
rmApplied associate-*l/15.2
Simplified15.1
Taylor expanded around 0 8.7
if 7.061692521831336e-266 < b < 1.7151811081882383e+78Initial program 8.6
rmApplied *-un-lft-identity8.6
Applied times-frac8.6
if 1.7151811081882383e+78 < b Initial program 43.0
rmApplied flip--62.6
Simplified61.8
Simplified61.8
rmApplied div-inv61.8
Taylor expanded around 0 4.8
Final simplification6.7
herbie shell --seed 2019303 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.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)))