\frac{\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}{2.0 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -3.234164035284793 \cdot 10^{+22}:\\
\;\;\;\;-1.0 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -2.4242286502051438 \cdot 10^{-135}:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - b \cdot b\right) + 4.0 \cdot \left(c \cdot a\right)}{\sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)} - b}}{2.0 \cdot a}\\
\mathbf{elif}\;b \le 1.7205132563858266 \cdot 10^{+103}:\\
\;\;\;\;\frac{1}{2.0 \cdot a} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1.0\\
\end{array}double f(double a, double b, double c) {
double r4380252 = b;
double r4380253 = -r4380252;
double r4380254 = r4380252 * r4380252;
double r4380255 = 4.0;
double r4380256 = a;
double r4380257 = c;
double r4380258 = r4380256 * r4380257;
double r4380259 = r4380255 * r4380258;
double r4380260 = r4380254 - r4380259;
double r4380261 = sqrt(r4380260);
double r4380262 = r4380253 - r4380261;
double r4380263 = 2.0;
double r4380264 = r4380263 * r4380256;
double r4380265 = r4380262 / r4380264;
return r4380265;
}
double f(double a, double b, double c) {
double r4380266 = b;
double r4380267 = -3.234164035284793e+22;
bool r4380268 = r4380266 <= r4380267;
double r4380269 = -1.0;
double r4380270 = c;
double r4380271 = r4380270 / r4380266;
double r4380272 = r4380269 * r4380271;
double r4380273 = -2.4242286502051438e-135;
bool r4380274 = r4380266 <= r4380273;
double r4380275 = r4380266 * r4380266;
double r4380276 = r4380275 - r4380275;
double r4380277 = 4.0;
double r4380278 = a;
double r4380279 = r4380270 * r4380278;
double r4380280 = r4380277 * r4380279;
double r4380281 = r4380276 + r4380280;
double r4380282 = r4380275 - r4380280;
double r4380283 = sqrt(r4380282);
double r4380284 = r4380283 - r4380266;
double r4380285 = r4380281 / r4380284;
double r4380286 = 2.0;
double r4380287 = r4380286 * r4380278;
double r4380288 = r4380285 / r4380287;
double r4380289 = 1.7205132563858266e+103;
bool r4380290 = r4380266 <= r4380289;
double r4380291 = 1.0;
double r4380292 = r4380291 / r4380287;
double r4380293 = -r4380266;
double r4380294 = r4380293 - r4380283;
double r4380295 = r4380292 * r4380294;
double r4380296 = r4380266 / r4380278;
double r4380297 = r4380271 - r4380296;
double r4380298 = 1.0;
double r4380299 = r4380297 * r4380298;
double r4380300 = r4380290 ? r4380295 : r4380299;
double r4380301 = r4380274 ? r4380288 : r4380300;
double r4380302 = r4380268 ? r4380272 : r4380301;
return r4380302;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.4 |
|---|---|
| Target | 21.3 |
| Herbie | 8.4 |
if b < -3.234164035284793e+22Initial program 56.6
Taylor expanded around -inf 4.6
if -3.234164035284793e+22 < b < -2.4242286502051438e-135Initial program 36.3
rmApplied flip--36.4
Simplified16.2
Simplified16.2
if -2.4242286502051438e-135 < b < 1.7205132563858266e+103Initial program 11.0
rmApplied div-inv11.2
if 1.7205132563858266e+103 < b Initial program 47.4
Taylor expanded around inf 3.2
Simplified3.2
Final simplification8.4
herbie shell --seed 2019165 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))