Average Error: 28.6 → 16.6
Time: 26.3s
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 773.6973993836591:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(b, b, c \cdot \left(-4 \cdot a\right)\right) - b \cdot b}{b + \sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-4 \cdot a\right)\right)}}}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2}{b} \cdot \left(c \cdot \frac{1}{2}\right)\\ \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 773.6973993836591:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(b, b, c \cdot \left(-4 \cdot a\right)\right) - b \cdot b}{b + \sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-4 \cdot a\right)\right)}}}{2}}{a}\\

\mathbf{else}:\\
\;\;\;\;\frac{-2}{b} \cdot \left(c \cdot \frac{1}{2}\right)\\

\end{array}
double f(double a, double b, double c) {
        double r1467089 = b;
        double r1467090 = -r1467089;
        double r1467091 = r1467089 * r1467089;
        double r1467092 = 4.0;
        double r1467093 = a;
        double r1467094 = r1467092 * r1467093;
        double r1467095 = c;
        double r1467096 = r1467094 * r1467095;
        double r1467097 = r1467091 - r1467096;
        double r1467098 = sqrt(r1467097);
        double r1467099 = r1467090 + r1467098;
        double r1467100 = 2.0;
        double r1467101 = r1467100 * r1467093;
        double r1467102 = r1467099 / r1467101;
        return r1467102;
}

double f(double a, double b, double c) {
        double r1467103 = b;
        double r1467104 = 773.6973993836591;
        bool r1467105 = r1467103 <= r1467104;
        double r1467106 = c;
        double r1467107 = -4.0;
        double r1467108 = a;
        double r1467109 = r1467107 * r1467108;
        double r1467110 = r1467106 * r1467109;
        double r1467111 = fma(r1467103, r1467103, r1467110);
        double r1467112 = r1467103 * r1467103;
        double r1467113 = r1467111 - r1467112;
        double r1467114 = sqrt(r1467111);
        double r1467115 = r1467103 + r1467114;
        double r1467116 = r1467113 / r1467115;
        double r1467117 = 2.0;
        double r1467118 = r1467116 / r1467117;
        double r1467119 = r1467118 / r1467108;
        double r1467120 = -2.0;
        double r1467121 = r1467120 / r1467103;
        double r1467122 = 0.5;
        double r1467123 = r1467106 * r1467122;
        double r1467124 = r1467121 * r1467123;
        double r1467125 = r1467105 ? r1467119 : r1467124;
        return r1467125;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

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

    1. Initial program 17.2

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

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

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

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

    if 773.6973993836591 < b

    1. Initial program 35.8

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

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

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

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

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

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

      \[\leadsto \frac{\frac{-2}{1}}{\color{blue}{\frac{2}{\frac{c}{b}}}}\]
    9. Using strategy rm
    10. Applied associate-/r/16.7

      \[\leadsto \frac{\frac{-2}{1}}{\color{blue}{\frac{2}{c} \cdot b}}\]
    11. Applied *-un-lft-identity16.7

      \[\leadsto \frac{\frac{-2}{\color{blue}{1 \cdot 1}}}{\frac{2}{c} \cdot b}\]
    12. Applied *-un-lft-identity16.7

      \[\leadsto \frac{\frac{\color{blue}{1 \cdot -2}}{1 \cdot 1}}{\frac{2}{c} \cdot b}\]
    13. Applied times-frac16.7

      \[\leadsto \frac{\color{blue}{\frac{1}{1} \cdot \frac{-2}{1}}}{\frac{2}{c} \cdot b}\]
    14. Applied times-frac16.7

      \[\leadsto \color{blue}{\frac{\frac{1}{1}}{\frac{2}{c}} \cdot \frac{\frac{-2}{1}}{b}}\]
    15. Simplified16.7

      \[\leadsto \color{blue}{\left(\frac{1}{2} \cdot c\right)} \cdot \frac{\frac{-2}{1}}{b}\]
    16. Simplified16.7

      \[\leadsto \left(\frac{1}{2} \cdot c\right) \cdot \color{blue}{\frac{-2}{b}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification16.6

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

Reproduce

herbie shell --seed 2019135 +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)))