\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{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r58308 = b;
double r58309 = -r58308;
double r58310 = r58308 * r58308;
double r58311 = 4.0;
double r58312 = a;
double r58313 = c;
double r58314 = r58312 * r58313;
double r58315 = r58311 * r58314;
double r58316 = r58310 - r58315;
double r58317 = sqrt(r58316);
double r58318 = r58309 - r58317;
double r58319 = 2.0;
double r58320 = r58319 * r58312;
double r58321 = r58318 / r58320;
return r58321;
}
double f(double a, double b, double c) {
double r58322 = b;
double r58323 = -5.674469085146397e+110;
bool r58324 = r58322 <= r58323;
double r58325 = -1.0;
double r58326 = c;
double r58327 = r58326 / r58322;
double r58328 = r58325 * r58327;
double r58329 = 7.061692521831336e-266;
bool r58330 = r58322 <= r58329;
double r58331 = 2.0;
double r58332 = r58331 * r58326;
double r58333 = 4.0;
double r58334 = a;
double r58335 = r58334 * r58326;
double r58336 = r58333 * r58335;
double r58337 = -r58336;
double r58338 = fma(r58322, r58322, r58337);
double r58339 = sqrt(r58338);
double r58340 = r58339 - r58322;
double r58341 = r58332 / r58340;
double r58342 = 1.7151811081882383e+78;
bool r58343 = r58322 <= r58342;
double r58344 = -r58322;
double r58345 = r58322 * r58322;
double r58346 = r58345 - r58336;
double r58347 = sqrt(r58346);
double r58348 = r58344 - r58347;
double r58349 = r58331 * r58334;
double r58350 = r58348 / r58349;
double r58351 = r58322 / r58334;
double r58352 = r58325 * r58351;
double r58353 = r58343 ? r58350 : r58352;
double r58354 = r58330 ? r58341 : r58353;
double r58355 = r58324 ? r58328 : r58354;
return r58355;
}




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
if 1.7151811081882383e+78 < b Initial program 43.0
rmApplied flip--62.6
Simplified61.8
Simplified61.8
Taylor expanded around 0 4.8
Final simplification6.7
herbie shell --seed 2019303 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))