\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 1.690589989251114327382025705232506133811 \cdot 10^{-305}:\\
\;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}}}{2}\\
\mathbf{elif}\;b \le 6.695434107567982389585546912636742560821 \cdot 10^{164}:\\
\;\;\;\;\frac{\left(\frac{4 \cdot c}{\sqrt{\mathsf{fma}\left(\sqrt[3]{b} \cdot \sqrt[3]{b}, \sqrt[3]{b}, \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}\right)}} \cdot \frac{a}{a}\right) \cdot \frac{-1}{\sqrt{\sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)} + b}}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot \left(-c\right), 4, 0\right)}{b + b}}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r110994 = b;
double r110995 = -r110994;
double r110996 = r110994 * r110994;
double r110997 = 4.0;
double r110998 = a;
double r110999 = r110997 * r110998;
double r111000 = c;
double r111001 = r110999 * r111000;
double r111002 = r110996 - r111001;
double r111003 = sqrt(r111002);
double r111004 = r110995 + r111003;
double r111005 = 2.0;
double r111006 = r111005 * r110998;
double r111007 = r111004 / r111006;
return r111007;
}
double f(double a, double b, double c) {
double r111008 = b;
double r111009 = 1.6905899892511143e-305;
bool r111010 = r111008 <= r111009;
double r111011 = 1.0;
double r111012 = a;
double r111013 = -r111012;
double r111014 = 4.0;
double r111015 = r111013 * r111014;
double r111016 = c;
double r111017 = r111008 * r111008;
double r111018 = fma(r111015, r111016, r111017);
double r111019 = sqrt(r111018);
double r111020 = r111019 - r111008;
double r111021 = r111012 / r111020;
double r111022 = r111011 / r111021;
double r111023 = 2.0;
double r111024 = r111022 / r111023;
double r111025 = 6.695434107567982e+164;
bool r111026 = r111008 <= r111025;
double r111027 = r111014 * r111016;
double r111028 = cbrt(r111008);
double r111029 = r111028 * r111028;
double r111030 = -r111016;
double r111031 = r111012 * r111030;
double r111032 = fma(r111014, r111031, r111017);
double r111033 = sqrt(r111032);
double r111034 = fma(r111029, r111028, r111033);
double r111035 = sqrt(r111034);
double r111036 = r111027 / r111035;
double r111037 = r111012 / r111012;
double r111038 = r111036 * r111037;
double r111039 = -1.0;
double r111040 = r111033 + r111008;
double r111041 = sqrt(r111040);
double r111042 = r111039 / r111041;
double r111043 = r111038 * r111042;
double r111044 = r111043 / r111023;
double r111045 = 0.0;
double r111046 = fma(r111031, r111014, r111045);
double r111047 = r111008 + r111008;
double r111048 = r111046 / r111047;
double r111049 = r111048 / r111012;
double r111050 = r111049 / r111023;
double r111051 = r111026 ? r111044 : r111050;
double r111052 = r111010 ? r111024 : r111051;
return r111052;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.8 |
|---|---|
| Target | 21.2 |
| Herbie | 16.3 |
if b < 1.6905899892511143e-305Initial program 22.0
Simplified22.0
rmApplied clear-num22.1
Simplified22.1
if 1.6905899892511143e-305 < b < 6.695434107567982e+164Initial program 35.2
Simplified35.2
rmApplied flip--35.3
Simplified17.3
Simplified17.2
rmApplied *-un-lft-identity17.2
Applied add-sqr-sqrt17.4
Applied *-un-lft-identity17.4
Applied times-frac17.4
Applied times-frac16.6
Simplified16.6
Simplified10.0
rmApplied add-cube-cbrt10.1
Applied fma-def10.1
if 6.695434107567982e+164 < b Initial program 64.0
Simplified64.0
rmApplied flip--64.0
Simplified38.0
Simplified38.0
Taylor expanded around 0 14.4
Final simplification16.3
herbie shell --seed 2019195 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))