\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.6472597296593428 \cdot 10^{81}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.0105231099196228 \cdot 10^{-270}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\mathbf{elif}\;b \le 14169621.248013001:\\
\;\;\;\;\frac{\frac{\frac{4 \cdot \left(a \cdot c\right)}{2}}{a}}{\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 r198131 = b;
double r198132 = -r198131;
double r198133 = r198131 * r198131;
double r198134 = 4.0;
double r198135 = a;
double r198136 = r198134 * r198135;
double r198137 = c;
double r198138 = r198136 * r198137;
double r198139 = r198133 - r198138;
double r198140 = sqrt(r198139);
double r198141 = r198132 + r198140;
double r198142 = 2.0;
double r198143 = r198142 * r198135;
double r198144 = r198141 / r198143;
return r198144;
}
double f(double a, double b, double c) {
double r198145 = b;
double r198146 = -2.647259729659343e+81;
bool r198147 = r198145 <= r198146;
double r198148 = 1.0;
double r198149 = c;
double r198150 = r198149 / r198145;
double r198151 = a;
double r198152 = r198145 / r198151;
double r198153 = r198150 - r198152;
double r198154 = r198148 * r198153;
double r198155 = 1.0105231099196228e-270;
bool r198156 = r198145 <= r198155;
double r198157 = 1.0;
double r198158 = 2.0;
double r198159 = r198158 * r198151;
double r198160 = -r198145;
double r198161 = r198145 * r198145;
double r198162 = 4.0;
double r198163 = r198162 * r198151;
double r198164 = r198163 * r198149;
double r198165 = r198161 - r198164;
double r198166 = sqrt(r198165);
double r198167 = r198160 + r198166;
double r198168 = r198159 / r198167;
double r198169 = r198157 / r198168;
double r198170 = 14169621.248013001;
bool r198171 = r198145 <= r198170;
double r198172 = r198151 * r198149;
double r198173 = r198162 * r198172;
double r198174 = r198173 / r198158;
double r198175 = r198174 / r198151;
double r198176 = r198160 - r198166;
double r198177 = r198175 / r198176;
double r198178 = -1.0;
double r198179 = r198178 * r198150;
double r198180 = r198171 ? r198177 : r198179;
double r198181 = r198156 ? r198169 : r198180;
double r198182 = r198147 ? r198154 : r198181;
return r198182;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 21.2 |
| Herbie | 9.3 |
if b < -2.647259729659343e+81Initial program 42.0
Taylor expanded around -inf 4.7
Simplified4.7
if -2.647259729659343e+81 < b < 1.0105231099196228e-270Initial program 10.1
rmApplied clear-num10.2
if 1.0105231099196228e-270 < b < 14169621.248013001Initial program 27.3
rmApplied flip-+27.3
Simplified17.4
rmApplied div-inv17.5
Applied associate-/l*23.3
Simplified23.2
rmApplied associate-/r*17.4
Simplified17.4
if 14169621.248013001 < b Initial program 55.9
Taylor expanded around inf 6.0
Final simplification9.3
herbie shell --seed 2020065 +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)))