\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 -524848456042.22467:\\
\;\;\;\;1 \cdot \left(-1 \cdot \frac{c}{b}\right)\\
\mathbf{elif}\;b \le -2.374474662067348 \cdot 10^{-33}:\\
\;\;\;\;1 \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le -8.63724924767252634 \cdot 10^{-116}:\\
\;\;\;\;1 \cdot \left(-1 \cdot \frac{c}{b}\right)\\
\mathbf{elif}\;b \le 5.57925007375450966 \cdot 10^{51}:\\
\;\;\;\;1 \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(-1 \cdot \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r74024 = b;
double r74025 = -r74024;
double r74026 = r74024 * r74024;
double r74027 = 4.0;
double r74028 = a;
double r74029 = c;
double r74030 = r74028 * r74029;
double r74031 = r74027 * r74030;
double r74032 = r74026 - r74031;
double r74033 = sqrt(r74032);
double r74034 = r74025 - r74033;
double r74035 = 2.0;
double r74036 = r74035 * r74028;
double r74037 = r74034 / r74036;
return r74037;
}
double f(double a, double b, double c) {
double r74038 = b;
double r74039 = -524848456042.2247;
bool r74040 = r74038 <= r74039;
double r74041 = 1.0;
double r74042 = -1.0;
double r74043 = c;
double r74044 = r74043 / r74038;
double r74045 = r74042 * r74044;
double r74046 = r74041 * r74045;
double r74047 = -2.374474662067348e-33;
bool r74048 = r74038 <= r74047;
double r74049 = -r74038;
double r74050 = r74038 * r74038;
double r74051 = 4.0;
double r74052 = a;
double r74053 = r74052 * r74043;
double r74054 = r74051 * r74053;
double r74055 = r74050 - r74054;
double r74056 = sqrt(r74055);
double r74057 = r74049 - r74056;
double r74058 = 2.0;
double r74059 = r74058 * r74052;
double r74060 = r74057 / r74059;
double r74061 = r74041 * r74060;
double r74062 = -8.637249247672526e-116;
bool r74063 = r74038 <= r74062;
double r74064 = 5.5792500737545097e+51;
bool r74065 = r74038 <= r74064;
double r74066 = r74038 / r74052;
double r74067 = r74042 * r74066;
double r74068 = r74041 * r74067;
double r74069 = r74065 ? r74061 : r74068;
double r74070 = r74063 ? r74046 : r74069;
double r74071 = r74048 ? r74061 : r74070;
double r74072 = r74040 ? r74046 : r74071;
return r74072;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 21.3 |
| Herbie | 11.0 |
if b < -524848456042.2247 or -2.374474662067348e-33 < b < -8.637249247672526e-116Initial program 52.5
rmApplied div-inv52.5
rmApplied *-un-lft-identity52.5
Applied associate-*l*52.5
Simplified52.5
Taylor expanded around -inf 9.7
if -524848456042.2247 < b < -2.374474662067348e-33 or -8.637249247672526e-116 < b < 5.5792500737545097e+51Initial program 14.8
rmApplied div-inv14.9
rmApplied *-un-lft-identity14.9
Applied associate-*l*14.9
Simplified14.8
if 5.5792500737545097e+51 < b Initial program 38.1
rmApplied div-inv38.2
rmApplied *-un-lft-identity38.2
Applied associate-*l*38.2
Simplified38.1
rmApplied clear-num38.2
Taylor expanded around 0 5.8
Final simplification11.0
herbie shell --seed 2020018 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))