\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 -8.424937854855119 \cdot 10^{-129}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 3.912332224813067 \cdot 10^{+23}:\\
\;\;\;\;\frac{1}{\frac{2}{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)}} \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r1583328 = b;
double r1583329 = -r1583328;
double r1583330 = r1583328 * r1583328;
double r1583331 = 4.0;
double r1583332 = a;
double r1583333 = c;
double r1583334 = r1583332 * r1583333;
double r1583335 = r1583331 * r1583334;
double r1583336 = r1583330 - r1583335;
double r1583337 = sqrt(r1583336);
double r1583338 = r1583329 - r1583337;
double r1583339 = 2.0;
double r1583340 = r1583339 * r1583332;
double r1583341 = r1583338 / r1583340;
return r1583341;
}
double f(double a, double b, double c) {
double r1583342 = b;
double r1583343 = -8.424937854855119e-129;
bool r1583344 = r1583342 <= r1583343;
double r1583345 = c;
double r1583346 = r1583345 / r1583342;
double r1583347 = -r1583346;
double r1583348 = 3.912332224813067e+23;
bool r1583349 = r1583342 <= r1583348;
double r1583350 = 1.0;
double r1583351 = 2.0;
double r1583352 = -r1583342;
double r1583353 = -4.0;
double r1583354 = a;
double r1583355 = r1583354 * r1583345;
double r1583356 = r1583353 * r1583355;
double r1583357 = fma(r1583342, r1583342, r1583356);
double r1583358 = sqrt(r1583357);
double r1583359 = r1583352 - r1583358;
double r1583360 = r1583351 / r1583359;
double r1583361 = r1583360 * r1583354;
double r1583362 = r1583350 / r1583361;
double r1583363 = r1583342 / r1583354;
double r1583364 = r1583346 - r1583363;
double r1583365 = r1583349 ? r1583362 : r1583364;
double r1583366 = r1583344 ? r1583347 : r1583365;
return r1583366;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.3 |
| Herbie | 10.6 |
if b < -8.424937854855119e-129Initial program 50.5
Taylor expanded around -inf 11.4
Simplified11.4
if -8.424937854855119e-129 < b < 3.912332224813067e+23Initial program 12.3
rmApplied clear-num12.5
Simplified12.5
if 3.912332224813067e+23 < b Initial program 32.6
Taylor expanded around inf 6.2
Final simplification10.6
herbie shell --seed 2019155 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))