\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 -6.05669002671933381232315467688999002364 \cdot 10^{153}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 3.411004807395853104361669776563711353544 \cdot 10^{-303}:\\
\;\;\;\;\frac{\frac{c \cdot 4}{2}}{\sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} + \left(-b\right)}\\
\mathbf{elif}\;b \le 0.173897874048477174557802982235443778336:\\
\;\;\;\;\frac{b + \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)}}{\left(-a\right) \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r3340233 = b;
double r3340234 = -r3340233;
double r3340235 = r3340233 * r3340233;
double r3340236 = 4.0;
double r3340237 = a;
double r3340238 = c;
double r3340239 = r3340237 * r3340238;
double r3340240 = r3340236 * r3340239;
double r3340241 = r3340235 - r3340240;
double r3340242 = sqrt(r3340241);
double r3340243 = r3340234 - r3340242;
double r3340244 = 2.0;
double r3340245 = r3340244 * r3340237;
double r3340246 = r3340243 / r3340245;
return r3340246;
}
double f(double a, double b, double c) {
double r3340247 = b;
double r3340248 = -6.056690026719334e+153;
bool r3340249 = r3340247 <= r3340248;
double r3340250 = -1.0;
double r3340251 = c;
double r3340252 = r3340251 / r3340247;
double r3340253 = r3340250 * r3340252;
double r3340254 = 3.411004807395853e-303;
bool r3340255 = r3340247 <= r3340254;
double r3340256 = 4.0;
double r3340257 = r3340251 * r3340256;
double r3340258 = 2.0;
double r3340259 = r3340257 / r3340258;
double r3340260 = r3340247 * r3340247;
double r3340261 = a;
double r3340262 = r3340251 * r3340261;
double r3340263 = r3340256 * r3340262;
double r3340264 = r3340260 - r3340263;
double r3340265 = sqrt(r3340264);
double r3340266 = -r3340247;
double r3340267 = r3340265 + r3340266;
double r3340268 = r3340259 / r3340267;
double r3340269 = 0.17389787404847717;
bool r3340270 = r3340247 <= r3340269;
double r3340271 = r3340247 + r3340265;
double r3340272 = -r3340261;
double r3340273 = r3340272 * r3340258;
double r3340274 = r3340271 / r3340273;
double r3340275 = 1.0;
double r3340276 = r3340247 / r3340261;
double r3340277 = r3340252 - r3340276;
double r3340278 = r3340275 * r3340277;
double r3340279 = r3340270 ? r3340274 : r3340278;
double r3340280 = r3340255 ? r3340268 : r3340279;
double r3340281 = r3340249 ? r3340253 : r3340280;
return r3340281;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.3 |
| Herbie | 7.1 |
if b < -6.056690026719334e+153Initial program 64.0
Taylor expanded around -inf 1.1
if -6.056690026719334e+153 < b < 3.411004807395853e-303Initial program 34.0
rmApplied div-inv34.1
rmApplied flip--34.1
Applied associate-*l/34.1
Simplified13.2
Taylor expanded around 0 7.6
if 3.411004807395853e-303 < b < 0.17389787404847717Initial program 11.3
rmApplied frac-2neg11.3
Simplified11.3
if 0.17389787404847717 < b Initial program 31.2
Taylor expanded around inf 7.3
Simplified7.3
Final simplification7.1
herbie shell --seed 2019168 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))