Average Error: 28.4 → 16.8
Time: 23.9s
Precision: 64
\[1.0536712127723509 \cdot 10^{-08} \lt a \lt 94906265.62425156 \land 1.0536712127723509 \cdot 10^{-08} \lt b \lt 94906265.62425156 \land 1.0536712127723509 \cdot 10^{-08} \lt c \lt 94906265.62425156\]
\[\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 6094.521206369936:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right) - b \cdot b}{b + \sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)}}}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-c}{b}\\ \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 6094.521206369936:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right) - b \cdot b}{b + \sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)}}}{2}}{a}\\

\mathbf{else}:\\
\;\;\;\;\frac{-c}{b}\\

\end{array}
double f(double a, double b, double c) {
        double r1565807 = b;
        double r1565808 = -r1565807;
        double r1565809 = r1565807 * r1565807;
        double r1565810 = 4.0;
        double r1565811 = a;
        double r1565812 = r1565810 * r1565811;
        double r1565813 = c;
        double r1565814 = r1565812 * r1565813;
        double r1565815 = r1565809 - r1565814;
        double r1565816 = sqrt(r1565815);
        double r1565817 = r1565808 + r1565816;
        double r1565818 = 2.0;
        double r1565819 = r1565818 * r1565811;
        double r1565820 = r1565817 / r1565819;
        return r1565820;
}

double f(double a, double b, double c) {
        double r1565821 = b;
        double r1565822 = 6094.521206369936;
        bool r1565823 = r1565821 <= r1565822;
        double r1565824 = c;
        double r1565825 = -4.0;
        double r1565826 = a;
        double r1565827 = r1565825 * r1565826;
        double r1565828 = r1565824 * r1565827;
        double r1565829 = fma(r1565821, r1565821, r1565828);
        double r1565830 = r1565821 * r1565821;
        double r1565831 = r1565829 - r1565830;
        double r1565832 = sqrt(r1565829);
        double r1565833 = r1565821 + r1565832;
        double r1565834 = r1565831 / r1565833;
        double r1565835 = 2.0;
        double r1565836 = r1565834 / r1565835;
        double r1565837 = r1565836 / r1565826;
        double r1565838 = -r1565824;
        double r1565839 = r1565838 / r1565821;
        double r1565840 = r1565823 ? r1565837 : r1565839;
        return r1565840;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

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

    1. Initial program 19.2

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

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

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

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

    if 6094.521206369936 < b

    1. Initial program 37.3

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

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

      \[\leadsto \frac{\frac{\color{blue}{-2 \cdot \frac{a \cdot c}{b}}}{2}}{a}\]
    4. Using strategy rm
    5. Applied add-sqr-sqrt15.6

      \[\leadsto \frac{\frac{-2 \cdot \frac{a \cdot c}{b}}{2}}{\color{blue}{\sqrt{a} \cdot \sqrt{a}}}\]
    6. Applied *-un-lft-identity15.6

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

      \[\leadsto \color{blue}{\frac{1}{\sqrt{a}} \cdot \frac{\frac{-2 \cdot \frac{a \cdot c}{b}}{2}}{\sqrt{a}}}\]
    8. Simplified15.6

      \[\leadsto \frac{1}{\sqrt{a}} \cdot \color{blue}{\frac{-c \cdot \frac{a}{b}}{\sqrt{a}}}\]
    9. Taylor expanded around 0 15.4

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
    10. Simplified15.4

      \[\leadsto \color{blue}{\frac{-c}{b}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification16.8

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

Reproduce

herbie shell --seed 2019129 +o rules:numerics
(FPCore (a b c)
  :name "Quadratic roots, narrow range"
  :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)))