\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 -3.060976138917674342180206539993786896862 \cdot 10^{65}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -5.269237409668851033931621618066544269281 \cdot 10^{-239}:\\
\;\;\;\;\frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2} \cdot \frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{a}\\
\mathbf{elif}\;b \le 4.059864939717054460242095466484063430125 \cdot 10^{128}:\\
\;\;\;\;\frac{1}{\frac{0.5}{c} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r85197 = b;
double r85198 = -r85197;
double r85199 = r85197 * r85197;
double r85200 = 4.0;
double r85201 = a;
double r85202 = r85200 * r85201;
double r85203 = c;
double r85204 = r85202 * r85203;
double r85205 = r85199 - r85204;
double r85206 = sqrt(r85205);
double r85207 = r85198 + r85206;
double r85208 = 2.0;
double r85209 = r85208 * r85201;
double r85210 = r85207 / r85209;
return r85210;
}
double f(double a, double b, double c) {
double r85211 = b;
double r85212 = -3.0609761389176743e+65;
bool r85213 = r85211 <= r85212;
double r85214 = 1.0;
double r85215 = c;
double r85216 = r85215 / r85211;
double r85217 = a;
double r85218 = r85211 / r85217;
double r85219 = r85216 - r85218;
double r85220 = r85214 * r85219;
double r85221 = -5.269237409668851e-239;
bool r85222 = r85211 <= r85221;
double r85223 = -r85211;
double r85224 = r85211 * r85211;
double r85225 = 4.0;
double r85226 = r85225 * r85217;
double r85227 = r85226 * r85215;
double r85228 = r85224 - r85227;
double r85229 = sqrt(r85228);
double r85230 = r85223 + r85229;
double r85231 = sqrt(r85230);
double r85232 = 2.0;
double r85233 = r85231 / r85232;
double r85234 = r85231 / r85217;
double r85235 = r85233 * r85234;
double r85236 = 4.0598649397170545e+128;
bool r85237 = r85211 <= r85236;
double r85238 = 1.0;
double r85239 = 0.5;
double r85240 = r85239 / r85215;
double r85241 = r85223 - r85229;
double r85242 = r85240 * r85241;
double r85243 = r85238 / r85242;
double r85244 = -1.0;
double r85245 = r85244 * r85216;
double r85246 = r85237 ? r85243 : r85245;
double r85247 = r85222 ? r85235 : r85246;
double r85248 = r85213 ? r85220 : r85247;
return r85248;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.4 |
|---|---|
| Target | 20.5 |
| Herbie | 6.6 |
if b < -3.0609761389176743e+65Initial program 40.1
Taylor expanded around -inf 4.4
Simplified4.4
if -3.0609761389176743e+65 < b < -5.269237409668851e-239Initial program 7.6
rmApplied add-sqr-sqrt8.0
Applied times-frac8.0
if -5.269237409668851e-239 < b < 4.0598649397170545e+128Initial program 31.1
rmApplied flip-+31.2
Simplified15.4
rmApplied clear-num15.6
Simplified14.7
Taylor expanded around 0 9.3
if 4.0598649397170545e+128 < b Initial program 61.3
Taylor expanded around inf 2.0
Final simplification6.6
herbie shell --seed 2019356 +o rules:numerics
(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)))