\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.550162015746626746000974336574470460524 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.61145084478121505718169973575148582501 \cdot 10^{-34}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r87200 = b;
double r87201 = -r87200;
double r87202 = r87200 * r87200;
double r87203 = 4.0;
double r87204 = a;
double r87205 = r87203 * r87204;
double r87206 = c;
double r87207 = r87205 * r87206;
double r87208 = r87202 - r87207;
double r87209 = sqrt(r87208);
double r87210 = r87201 + r87209;
double r87211 = 2.0;
double r87212 = r87211 * r87204;
double r87213 = r87210 / r87212;
return r87213;
}
double f(double a, double b, double c) {
double r87214 = b;
double r87215 = -1.5501620157466267e+150;
bool r87216 = r87214 <= r87215;
double r87217 = 1.0;
double r87218 = c;
double r87219 = r87218 / r87214;
double r87220 = a;
double r87221 = r87214 / r87220;
double r87222 = r87219 - r87221;
double r87223 = r87217 * r87222;
double r87224 = 1.611450844781215e-34;
bool r87225 = r87214 <= r87224;
double r87226 = 1.0;
double r87227 = 2.0;
double r87228 = r87227 * r87220;
double r87229 = r87214 * r87214;
double r87230 = 4.0;
double r87231 = r87230 * r87220;
double r87232 = r87231 * r87218;
double r87233 = r87229 - r87232;
double r87234 = sqrt(r87233);
double r87235 = r87234 - r87214;
double r87236 = r87228 / r87235;
double r87237 = r87226 / r87236;
double r87238 = -1.0;
double r87239 = r87238 * r87219;
double r87240 = r87225 ? r87237 : r87239;
double r87241 = r87216 ? r87223 : r87240;
return r87241;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 21.2 |
| Herbie | 9.9 |
if b < -1.5501620157466267e+150Initial program 62.9
Simplified62.9
Taylor expanded around -inf 1.7
Simplified1.7
if -1.5501620157466267e+150 < b < 1.611450844781215e-34Initial program 13.6
Simplified13.6
rmApplied clear-num13.7
if 1.611450844781215e-34 < b Initial program 55.0
Simplified55.0
Taylor expanded around inf 7.0
Final simplification9.9
herbie shell --seed 2019325
(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)))