\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 r64241 = b;
double r64242 = -r64241;
double r64243 = r64241 * r64241;
double r64244 = 4.0;
double r64245 = a;
double r64246 = c;
double r64247 = r64245 * r64246;
double r64248 = r64244 * r64247;
double r64249 = r64243 - r64248;
double r64250 = sqrt(r64249);
double r64251 = r64242 - r64250;
double r64252 = 2.0;
double r64253 = r64252 * r64245;
double r64254 = r64251 / r64253;
return r64254;
}
double f(double a, double b, double c) {
double r64255 = b;
double r64256 = -5.263290697710818e+146;
bool r64257 = r64255 <= r64256;
double r64258 = -1.0;
double r64259 = c;
double r64260 = r64259 / r64255;
double r64261 = r64258 * r64260;
double r64262 = -2.182382645844659e-295;
bool r64263 = r64255 <= r64262;
double r64264 = 1.0;
double r64265 = 2.0;
double r64266 = a;
double r64267 = r64265 * r64266;
double r64268 = 4.0;
double r64269 = r64268 * r64266;
double r64270 = r64267 / r64269;
double r64271 = r64255 * r64255;
double r64272 = r64266 * r64259;
double r64273 = r64268 * r64272;
double r64274 = r64271 - r64273;
double r64275 = sqrt(r64274);
double r64276 = r64275 - r64255;
double r64277 = r64259 / r64276;
double r64278 = r64270 / r64277;
double r64279 = r64264 / r64278;
double r64280 = 3.1607591925776442e+143;
bool r64281 = r64255 <= r64280;
double r64282 = -r64255;
double r64283 = r64282 - r64275;
double r64284 = r64283 / r64267;
double r64285 = 1.0;
double r64286 = r64255 / r64266;
double r64287 = r64260 - r64286;
double r64288 = r64285 * r64287;
double r64289 = r64281 ? r64284 : r64288;
double r64290 = r64263 ? r64279 : r64289;
double r64291 = r64257 ? r64261 : r64290;
return r64291;
}




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 *-un-lft-identity15.7
Applied *-un-lft-identity15.7
Applied times-frac15.7
Applied associate-/l*15.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)))