\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 -4.28731338523231927980681449927859365128 \cdot 10^{78}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.914307195398066377772349987498596241276 \cdot 10^{-230}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}} \cdot \sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.314242005915538169906364876769500015544 \cdot 10^{99}:\\
\;\;\;\;1 \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{2 \cdot a}}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r83223 = b;
double r83224 = -r83223;
double r83225 = r83223 * r83223;
double r83226 = 4.0;
double r83227 = a;
double r83228 = c;
double r83229 = r83227 * r83228;
double r83230 = r83226 * r83229;
double r83231 = r83225 - r83230;
double r83232 = sqrt(r83231);
double r83233 = r83224 + r83232;
double r83234 = 2.0;
double r83235 = r83234 * r83227;
double r83236 = r83233 / r83235;
return r83236;
}
double f(double a, double b, double c) {
double r83237 = b;
double r83238 = -4.287313385232319e+78;
bool r83239 = r83237 <= r83238;
double r83240 = 1.0;
double r83241 = c;
double r83242 = r83241 / r83237;
double r83243 = a;
double r83244 = r83237 / r83243;
double r83245 = r83242 - r83244;
double r83246 = r83240 * r83245;
double r83247 = -3.9143071953980664e-230;
bool r83248 = r83237 <= r83247;
double r83249 = -r83237;
double r83250 = r83237 * r83237;
double r83251 = 4.0;
double r83252 = r83243 * r83241;
double r83253 = r83251 * r83252;
double r83254 = r83250 - r83253;
double r83255 = sqrt(r83254);
double r83256 = sqrt(r83255);
double r83257 = r83256 * r83256;
double r83258 = r83249 + r83257;
double r83259 = 2.0;
double r83260 = r83259 * r83243;
double r83261 = r83258 / r83260;
double r83262 = 3.314242005915538e+99;
bool r83263 = r83237 <= r83262;
double r83264 = 1.0;
double r83265 = r83253 / r83260;
double r83266 = r83249 - r83255;
double r83267 = r83265 / r83266;
double r83268 = r83264 * r83267;
double r83269 = -1.0;
double r83270 = r83269 * r83242;
double r83271 = r83263 ? r83268 : r83270;
double r83272 = r83248 ? r83261 : r83271;
double r83273 = r83239 ? r83246 : r83272;
return r83273;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.7 |
| Herbie | 8.6 |
if b < -4.287313385232319e+78Initial program 41.5
Taylor expanded around -inf 4.2
Simplified4.2
if -4.287313385232319e+78 < b < -3.9143071953980664e-230Initial program 7.7
rmApplied add-sqr-sqrt7.7
Applied sqrt-prod7.9
if -3.9143071953980664e-230 < b < 3.314242005915538e+99Initial program 30.8
rmApplied flip-+30.8
Simplified16.4
rmApplied div-inv16.4
rmApplied *-un-lft-identity16.4
Applied associate-*l*16.4
Simplified15.5
if 3.314242005915538e+99 < b Initial program 59.1
Taylor expanded around inf 2.6
Final simplification8.6
herbie shell --seed 2019352
(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)))