\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 -1.550162015746626746000974336574470460524 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.61145084478121505718169973575148582501 \cdot 10^{-34}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r74189 = b;
double r74190 = -r74189;
double r74191 = r74189 * r74189;
double r74192 = 4.0;
double r74193 = a;
double r74194 = c;
double r74195 = r74193 * r74194;
double r74196 = r74192 * r74195;
double r74197 = r74191 - r74196;
double r74198 = sqrt(r74197);
double r74199 = r74190 + r74198;
double r74200 = 2.0;
double r74201 = r74200 * r74193;
double r74202 = r74199 / r74201;
return r74202;
}
double f(double a, double b, double c) {
double r74203 = b;
double r74204 = -1.5501620157466267e+150;
bool r74205 = r74203 <= r74204;
double r74206 = 1.0;
double r74207 = c;
double r74208 = r74207 / r74203;
double r74209 = a;
double r74210 = r74203 / r74209;
double r74211 = r74208 - r74210;
double r74212 = r74206 * r74211;
double r74213 = 1.611450844781215e-34;
bool r74214 = r74203 <= r74213;
double r74215 = 1.0;
double r74216 = 2.0;
double r74217 = r74216 * r74209;
double r74218 = r74203 * r74203;
double r74219 = 4.0;
double r74220 = r74209 * r74207;
double r74221 = r74219 * r74220;
double r74222 = r74218 - r74221;
double r74223 = sqrt(r74222);
double r74224 = r74223 - r74203;
double r74225 = r74217 / r74224;
double r74226 = r74215 / r74225;
double r74227 = -1.0;
double r74228 = r74227 * r74208;
double r74229 = r74214 ? r74226 : r74228;
double r74230 = r74205 ? r74212 : r74229;
return r74230;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 21.2 |
| Herbie | 9.9 |
if b < -1.5501620157466267e+150Initial program 62.9
Simplified62.9
Taylor expanded around -inf 1.7
Simplified1.7
if -1.5501620157466267e+150 < b < 1.611450844781215e-34Initial program 13.6
Simplified13.6
rmApplied clear-num13.7
if 1.611450844781215e-34 < b Initial program 55.0
Simplified55.0
Taylor expanded around inf 7.0
Final simplification9.9
herbie shell --seed 2019325
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))