\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 -2.3044033969831823 \cdot 10^{153}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 3.2001964328628576 \cdot 10^{-306}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.2561019611397527 \cdot 10^{141}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r105157 = b;
double r105158 = -r105157;
double r105159 = r105157 * r105157;
double r105160 = 4.0;
double r105161 = a;
double r105162 = r105160 * r105161;
double r105163 = c;
double r105164 = r105162 * r105163;
double r105165 = r105159 - r105164;
double r105166 = sqrt(r105165);
double r105167 = r105158 + r105166;
double r105168 = 2.0;
double r105169 = r105168 * r105161;
double r105170 = r105167 / r105169;
return r105170;
}
double f(double a, double b, double c) {
double r105171 = b;
double r105172 = -2.3044033969831823e+153;
bool r105173 = r105171 <= r105172;
double r105174 = 1.0;
double r105175 = c;
double r105176 = r105175 / r105171;
double r105177 = a;
double r105178 = r105171 / r105177;
double r105179 = r105176 - r105178;
double r105180 = r105174 * r105179;
double r105181 = 3.2001964328628576e-306;
bool r105182 = r105171 <= r105181;
double r105183 = -r105171;
double r105184 = r105171 * r105171;
double r105185 = 4.0;
double r105186 = r105185 * r105177;
double r105187 = r105186 * r105175;
double r105188 = r105184 - r105187;
double r105189 = sqrt(r105188);
double r105190 = r105183 + r105189;
double r105191 = 2.0;
double r105192 = r105191 * r105177;
double r105193 = r105190 / r105192;
double r105194 = 3.256101961139753e+141;
bool r105195 = r105171 <= r105194;
double r105196 = r105191 * r105175;
double r105197 = r105183 - r105189;
double r105198 = r105196 / r105197;
double r105199 = -1.0;
double r105200 = r105199 * r105176;
double r105201 = r105195 ? r105198 : r105200;
double r105202 = r105182 ? r105193 : r105201;
double r105203 = r105173 ? r105180 : r105202;
return r105203;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.7 |
| Herbie | 6.5 |
if b < -2.3044033969831823e+153Initial program 63.5
Taylor expanded around -inf 2.0
Simplified2.0
if -2.3044033969831823e+153 < b < 3.2001964328628576e-306Initial program 8.9
if 3.2001964328628576e-306 < b < 3.256101961139753e+141Initial program 34.3
rmApplied clear-num34.4
rmApplied flip-+34.4
Applied associate-/r/34.4
Applied associate-/r*34.5
Simplified15.0
Taylor expanded around 0 8.3
if 3.256101961139753e+141 < b Initial program 62.5
Taylor expanded around inf 1.5
Final simplification6.5
herbie shell --seed 2020060
(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)))