\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.763265898390888870746272508253147533908 \cdot 10^{-72}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 6.568668442325333133869311590844159217228 \cdot 10^{48}:\\
\;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r91306 = b;
double r91307 = -r91306;
double r91308 = r91306 * r91306;
double r91309 = 4.0;
double r91310 = a;
double r91311 = c;
double r91312 = r91310 * r91311;
double r91313 = r91309 * r91312;
double r91314 = r91308 - r91313;
double r91315 = sqrt(r91314);
double r91316 = r91307 - r91315;
double r91317 = 2.0;
double r91318 = r91317 * r91310;
double r91319 = r91316 / r91318;
return r91319;
}
double f(double a, double b, double c) {
double r91320 = b;
double r91321 = -2.763265898390889e-72;
bool r91322 = r91320 <= r91321;
double r91323 = -1.0;
double r91324 = c;
double r91325 = r91324 / r91320;
double r91326 = r91323 * r91325;
double r91327 = 6.568668442325333e+48;
bool r91328 = r91320 <= r91327;
double r91329 = -r91320;
double r91330 = r91320 * r91320;
double r91331 = 4.0;
double r91332 = a;
double r91333 = r91332 * r91324;
double r91334 = r91331 * r91333;
double r91335 = r91330 - r91334;
double r91336 = sqrt(r91335);
double r91337 = r91329 - r91336;
double r91338 = 1.0;
double r91339 = 2.0;
double r91340 = r91339 * r91332;
double r91341 = r91338 / r91340;
double r91342 = r91337 * r91341;
double r91343 = 1.0;
double r91344 = r91320 / r91332;
double r91345 = r91325 - r91344;
double r91346 = r91343 * r91345;
double r91347 = r91328 ? r91342 : r91346;
double r91348 = r91322 ? r91326 : r91347;
return r91348;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 21.3 |
| Herbie | 10.5 |
if b < -2.763265898390889e-72Initial program 52.9
Taylor expanded around -inf 9.2
if -2.763265898390889e-72 < b < 6.568668442325333e+48Initial program 14.1
rmApplied div-inv14.2
if 6.568668442325333e+48 < b Initial program 39.1
Taylor expanded around inf 5.4
Simplified5.4
Final simplification10.5
herbie shell --seed 2019344 +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)))