\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 -2.7757959561449348 \cdot 10^{129}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 9.70088188146619881 \cdot 10^{-222}:\\
\;\;\;\;\frac{1}{\frac{\frac{0.5}{c}}{\frac{1}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}}\\
\mathbf{elif}\;b \le 3.2649111998892948 \cdot 10^{111}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r71185 = b;
double r71186 = -r71185;
double r71187 = r71185 * r71185;
double r71188 = 4.0;
double r71189 = a;
double r71190 = c;
double r71191 = r71189 * r71190;
double r71192 = r71188 * r71191;
double r71193 = r71187 - r71192;
double r71194 = sqrt(r71193);
double r71195 = r71186 - r71194;
double r71196 = 2.0;
double r71197 = r71196 * r71189;
double r71198 = r71195 / r71197;
return r71198;
}
double f(double a, double b, double c) {
double r71199 = b;
double r71200 = -2.775795956144935e+129;
bool r71201 = r71199 <= r71200;
double r71202 = -1.0;
double r71203 = c;
double r71204 = r71203 / r71199;
double r71205 = r71202 * r71204;
double r71206 = 9.700881881466199e-222;
bool r71207 = r71199 <= r71206;
double r71208 = 1.0;
double r71209 = 0.5;
double r71210 = r71209 / r71203;
double r71211 = r71199 * r71199;
double r71212 = 4.0;
double r71213 = a;
double r71214 = r71213 * r71203;
double r71215 = r71212 * r71214;
double r71216 = r71211 - r71215;
double r71217 = sqrt(r71216);
double r71218 = r71217 - r71199;
double r71219 = r71208 / r71218;
double r71220 = r71210 / r71219;
double r71221 = r71208 / r71220;
double r71222 = 3.264911199889295e+111;
bool r71223 = r71199 <= r71222;
double r71224 = -r71199;
double r71225 = r71224 - r71217;
double r71226 = 2.0;
double r71227 = r71226 * r71213;
double r71228 = r71225 / r71227;
double r71229 = r71199 / r71213;
double r71230 = r71202 * r71229;
double r71231 = r71223 ? r71228 : r71230;
double r71232 = r71207 ? r71221 : r71231;
double r71233 = r71201 ? r71205 : r71232;
return r71233;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 20.6 |
| Herbie | 6.9 |
if b < -2.775795956144935e+129Initial program 61.4
Taylor expanded around -inf 2.2
if -2.775795956144935e+129 < b < 9.700881881466199e-222Initial program 31.8
rmApplied flip--31.9
Simplified15.9
Simplified15.9
rmApplied clear-num16.1
Simplified16.1
rmApplied div-inv16.2
Applied associate-/r*15.3
Simplified15.3
Taylor expanded around 0 9.6
if 9.700881881466199e-222 < b < 3.264911199889295e+111Initial program 8.1
if 3.264911199889295e+111 < b Initial program 49.7
rmApplied flip--63.3
Simplified62.3
Simplified62.3
Taylor expanded around 0 3.6
Final simplification6.9
herbie shell --seed 2020047
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))