\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.98276540088900058 \cdot 10^{134}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.1860189201379418 \cdot 10^{-161}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r128221 = b;
double r128222 = -r128221;
double r128223 = r128221 * r128221;
double r128224 = 4.0;
double r128225 = a;
double r128226 = r128224 * r128225;
double r128227 = c;
double r128228 = r128226 * r128227;
double r128229 = r128223 - r128228;
double r128230 = sqrt(r128229);
double r128231 = r128222 + r128230;
double r128232 = 2.0;
double r128233 = r128232 * r128225;
double r128234 = r128231 / r128233;
return r128234;
}
double f(double a, double b, double c) {
double r128235 = b;
double r128236 = -1.9827654008890006e+134;
bool r128237 = r128235 <= r128236;
double r128238 = 1.0;
double r128239 = c;
double r128240 = r128239 / r128235;
double r128241 = a;
double r128242 = r128235 / r128241;
double r128243 = r128240 - r128242;
double r128244 = r128238 * r128243;
double r128245 = 1.1860189201379418e-161;
bool r128246 = r128235 <= r128245;
double r128247 = -r128235;
double r128248 = r128235 * r128235;
double r128249 = 4.0;
double r128250 = r128249 * r128241;
double r128251 = r128250 * r128239;
double r128252 = r128248 - r128251;
double r128253 = sqrt(r128252);
double r128254 = r128247 + r128253;
double r128255 = 1.0;
double r128256 = 2.0;
double r128257 = r128256 * r128241;
double r128258 = r128255 / r128257;
double r128259 = r128254 * r128258;
double r128260 = -1.0;
double r128261 = r128260 * r128240;
double r128262 = r128246 ? r128259 : r128261;
double r128263 = r128237 ? r128244 : r128262;
return r128263;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.7 |
|---|---|
| Target | 21.0 |
| Herbie | 10.9 |
if b < -1.9827654008890006e+134Initial program 56.8
Taylor expanded around -inf 3.1
Simplified3.1
if -1.9827654008890006e+134 < b < 1.1860189201379418e-161Initial program 10.3
rmApplied div-inv10.5
if 1.1860189201379418e-161 < b Initial program 49.7
Taylor expanded around inf 13.7
Final simplification10.9
herbie shell --seed 2020047
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))