\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.433410545098929447802382436964367105587 \cdot 10^{-229}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)}}{a} - \frac{b}{a}}{2}\\
\mathbf{elif}\;b \le 6.146061404567155775272975402192884048556 \cdot 10^{152}:\\
\;\;\;\;\frac{\left(\frac{c \cdot 4}{\sqrt{\sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)} + b}} \cdot \frac{a}{a}\right) \cdot \frac{-1}{\sqrt{\mathsf{fma}\left(\sqrt[3]{b} \cdot \sqrt[3]{b}, \sqrt[3]{b}, \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}\right)}}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(c \cdot \left(-a\right), 4, 0\right)}{b + b}}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r279771 = b;
double r279772 = -r279771;
double r279773 = r279771 * r279771;
double r279774 = 4.0;
double r279775 = a;
double r279776 = r279774 * r279775;
double r279777 = c;
double r279778 = r279776 * r279777;
double r279779 = r279773 - r279778;
double r279780 = sqrt(r279779);
double r279781 = r279772 + r279780;
double r279782 = 2.0;
double r279783 = r279782 * r279775;
double r279784 = r279781 / r279783;
return r279784;
}
double f(double a, double b, double c) {
double r279785 = b;
double r279786 = 1.4334105450989294e-229;
bool r279787 = r279785 <= r279786;
double r279788 = a;
double r279789 = -r279788;
double r279790 = 4.0;
double r279791 = r279789 * r279790;
double r279792 = c;
double r279793 = r279785 * r279785;
double r279794 = fma(r279791, r279792, r279793);
double r279795 = sqrt(r279794);
double r279796 = r279795 / r279788;
double r279797 = r279785 / r279788;
double r279798 = r279796 - r279797;
double r279799 = 2.0;
double r279800 = r279798 / r279799;
double r279801 = 6.146061404567156e+152;
bool r279802 = r279785 <= r279801;
double r279803 = r279792 * r279790;
double r279804 = r279792 * r279789;
double r279805 = fma(r279790, r279804, r279793);
double r279806 = sqrt(r279805);
double r279807 = r279806 + r279785;
double r279808 = sqrt(r279807);
double r279809 = r279803 / r279808;
double r279810 = r279788 / r279788;
double r279811 = r279809 * r279810;
double r279812 = -1.0;
double r279813 = cbrt(r279785);
double r279814 = r279813 * r279813;
double r279815 = fma(r279814, r279813, r279806);
double r279816 = sqrt(r279815);
double r279817 = r279812 / r279816;
double r279818 = r279811 * r279817;
double r279819 = r279818 / r279799;
double r279820 = 0.0;
double r279821 = fma(r279804, r279790, r279820);
double r279822 = r279785 + r279785;
double r279823 = r279821 / r279822;
double r279824 = r279823 / r279788;
double r279825 = r279824 / r279799;
double r279826 = r279802 ? r279819 : r279825;
double r279827 = r279787 ? r279800 : r279826;
return r279827;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.2 |
|---|---|
| Target | 21.0 |
| Herbie | 15.6 |
if b < 1.4334105450989294e-229Initial program 21.2
Simplified21.2
rmApplied div-sub21.2
Simplified21.2
if 1.4334105450989294e-229 < b < 6.146061404567156e+152Initial program 37.7
Simplified37.7
rmApplied flip--37.7
Simplified15.7
Simplified15.7
rmApplied *-un-lft-identity15.7
Applied add-sqr-sqrt15.9
Applied *-un-lft-identity15.9
Applied times-frac15.9
Applied times-frac14.9
Simplified14.9
Simplified7.5
rmApplied add-cube-cbrt7.6
Applied fma-def7.6
if 6.146061404567156e+152 < b Initial program 63.8
Simplified63.8
rmApplied flip--63.8
Simplified38.4
Simplified38.4
Taylor expanded around 0 14.3
Final simplification15.6
herbie shell --seed 2019174 +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)))