\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.263290697710817942239037357803149075237 \cdot 10^{146}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -2.182382645844658784648715405900710208288 \cdot 10^{-295}:\\
\;\;\;\;\frac{1}{\frac{\frac{2 \cdot a}{4 \cdot a}}{\frac{c}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}}\\
\mathbf{elif}\;b \le 3.160759192577644243019157975166466824718 \cdot 10^{143}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{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 r80282 = b;
double r80283 = -r80282;
double r80284 = r80282 * r80282;
double r80285 = 4.0;
double r80286 = a;
double r80287 = c;
double r80288 = r80286 * r80287;
double r80289 = r80285 * r80288;
double r80290 = r80284 - r80289;
double r80291 = sqrt(r80290);
double r80292 = r80283 - r80291;
double r80293 = 2.0;
double r80294 = r80293 * r80286;
double r80295 = r80292 / r80294;
return r80295;
}
double f(double a, double b, double c) {
double r80296 = b;
double r80297 = -5.263290697710818e+146;
bool r80298 = r80296 <= r80297;
double r80299 = -1.0;
double r80300 = c;
double r80301 = r80300 / r80296;
double r80302 = r80299 * r80301;
double r80303 = -2.182382645844659e-295;
bool r80304 = r80296 <= r80303;
double r80305 = 1.0;
double r80306 = 2.0;
double r80307 = a;
double r80308 = r80306 * r80307;
double r80309 = 4.0;
double r80310 = r80309 * r80307;
double r80311 = r80308 / r80310;
double r80312 = r80296 * r80296;
double r80313 = r80307 * r80300;
double r80314 = r80309 * r80313;
double r80315 = r80312 - r80314;
double r80316 = sqrt(r80315);
double r80317 = r80316 - r80296;
double r80318 = r80300 / r80317;
double r80319 = r80311 / r80318;
double r80320 = r80305 / r80319;
double r80321 = 3.1607591925776442e+143;
bool r80322 = r80296 <= r80321;
double r80323 = -r80296;
double r80324 = r80323 - r80316;
double r80325 = r80324 / r80308;
double r80326 = 1.0;
double r80327 = r80296 / r80307;
double r80328 = r80301 - r80327;
double r80329 = r80326 * r80328;
double r80330 = r80322 ? r80325 : r80329;
double r80331 = r80304 ? r80320 : r80330;
double r80332 = r80298 ? r80302 : r80331;
return r80332;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.6 |
|---|---|
| Target | 20.9 |
| Herbie | 6.3 |
if b < -5.263290697710818e+146Initial program 63.1
Taylor expanded around -inf 1.3
if -5.263290697710818e+146 < b < -2.182382645844659e-295Initial program 34.7
rmApplied flip--34.7
Simplified15.7
Simplified15.7
rmApplied clear-num15.9
Simplified15.9
rmApplied *-un-lft-identity15.9
Applied times-frac13.5
Applied associate-/r*7.6
Simplified7.6
if -2.182382645844659e-295 < b < 3.1607591925776442e+143Initial program 9.3
if 3.1607591925776442e+143 < b Initial program 59.6
Taylor expanded around inf 2.3
Simplified2.3
Final simplification6.3
herbie shell --seed 2019325
(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)))