Average Error: 28.6 → 17.3
Time: 8.6s
Precision: 64
\[1.05367121277235087 \cdot 10^{-8} \lt a \lt 94906265.6242515594 \land 1.05367121277235087 \cdot 10^{-8} \lt b \lt 94906265.6242515594 \land 1.05367121277235087 \cdot 10^{-8} \lt c \lt 94906265.6242515594\]
\[\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 17.714642954298647:\\ \;\;\;\;\frac{\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, \left(4 \cdot a\right) \cdot c\right)}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2}{\frac{a}{\frac{a}{\frac{b}{c}}} \cdot 2}\\ \end{array}\]
\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 17.714642954298647:\\
\;\;\;\;\frac{\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, \left(4 \cdot a\right) \cdot c\right)}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}}{2}}{a}\\

\mathbf{else}:\\
\;\;\;\;\frac{-2}{\frac{a}{\frac{a}{\frac{b}{c}}} \cdot 2}\\

\end{array}
double f(double a, double b, double c) {
        double r25834 = b;
        double r25835 = -r25834;
        double r25836 = r25834 * r25834;
        double r25837 = 4.0;
        double r25838 = a;
        double r25839 = r25837 * r25838;
        double r25840 = c;
        double r25841 = r25839 * r25840;
        double r25842 = r25836 - r25841;
        double r25843 = sqrt(r25842);
        double r25844 = r25835 + r25843;
        double r25845 = 2.0;
        double r25846 = r25845 * r25838;
        double r25847 = r25844 / r25846;
        return r25847;
}

double f(double a, double b, double c) {
        double r25848 = b;
        double r25849 = 17.714642954298647;
        bool r25850 = r25848 <= r25849;
        double r25851 = r25848 * r25848;
        double r25852 = 4.0;
        double r25853 = a;
        double r25854 = r25852 * r25853;
        double r25855 = c;
        double r25856 = r25854 * r25855;
        double r25857 = fma(r25848, r25848, r25856);
        double r25858 = r25851 - r25857;
        double r25859 = r25851 - r25856;
        double r25860 = sqrt(r25859);
        double r25861 = r25860 + r25848;
        double r25862 = r25858 / r25861;
        double r25863 = 2.0;
        double r25864 = r25862 / r25863;
        double r25865 = r25864 / r25853;
        double r25866 = -2.0;
        double r25867 = r25848 / r25855;
        double r25868 = r25853 / r25867;
        double r25869 = r25853 / r25868;
        double r25870 = r25869 * r25863;
        double r25871 = r25866 / r25870;
        double r25872 = r25850 ? r25865 : r25871;
        return r25872;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 2 regimes
  2. if b < 17.714642954298647

    1. Initial program 13.9

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified13.9

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2}}{a}}\]
    3. Using strategy rm
    4. Applied flip--13.9

      \[\leadsto \frac{\frac{\color{blue}{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b \cdot b}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}}}{2}}{a}\]
    5. Simplified13.2

      \[\leadsto \frac{\frac{\frac{\color{blue}{b \cdot b - \mathsf{fma}\left(b, b, \left(4 \cdot a\right) \cdot c\right)}}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}}{2}}{a}\]

    if 17.714642954298647 < b

    1. Initial program 33.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified33.3

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2}}{a}}\]
    3. Taylor expanded around inf 18.7

      \[\leadsto \frac{\frac{\color{blue}{-2 \cdot \frac{a \cdot c}{b}}}{2}}{a}\]
    4. Using strategy rm
    5. Applied clear-num18.7

      \[\leadsto \frac{\frac{-2 \cdot \color{blue}{\frac{1}{\frac{b}{a \cdot c}}}}{2}}{a}\]
    6. Using strategy rm
    7. Applied *-un-lft-identity18.7

      \[\leadsto \frac{\frac{-2 \cdot \frac{1}{\frac{b}{a \cdot c}}}{\color{blue}{1 \cdot 2}}}{a}\]
    8. Applied times-frac18.7

      \[\leadsto \frac{\color{blue}{\frac{-2}{1} \cdot \frac{\frac{1}{\frac{b}{a \cdot c}}}{2}}}{a}\]
    9. Applied associate-/l*18.7

      \[\leadsto \color{blue}{\frac{\frac{-2}{1}}{\frac{a}{\frac{\frac{1}{\frac{b}{a \cdot c}}}{2}}}}\]
    10. Simplified18.7

      \[\leadsto \frac{\frac{-2}{1}}{\color{blue}{\frac{a}{\frac{a}{\frac{b}{c}}} \cdot 2}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification17.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le 17.714642954298647:\\ \;\;\;\;\frac{\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, \left(4 \cdot a\right) \cdot c\right)}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2}{\frac{a}{\frac{a}{\frac{b}{c}}} \cdot 2}\\ \end{array}\]

Reproduce

herbie shell --seed 2020046 +o rules:numerics
(FPCore (a b c)
  :name "Quadratic roots, narrow range"
  :precision binary64
  :pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))