Average Error: 44.7 → 11.0
Time: 17.5s
Precision: 64
\[1.1102230246251565 \cdot 10^{-16} \lt a \lt 9007199254740992.0 \land 1.1102230246251565 \cdot 10^{-16} \lt b \lt 9007199254740992.0 \land 1.1102230246251565 \cdot 10^{-16} \lt c \lt 9007199254740992.0\]
\[\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 0.09946845057046652:\\ \;\;\;\;\frac{\frac{\frac{\sqrt{\mathsf{fma}\left(c \cdot -4, a, b \cdot b\right)} \cdot \mathsf{fma}\left(c \cdot -4, a, b \cdot b\right) - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(b, \sqrt{\mathsf{fma}\left(c \cdot -4, a, b \cdot b\right)}, b \cdot b + \mathsf{fma}\left(c \cdot -4, a, b \cdot b\right)\right)}}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{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 0.09946845057046652:\\
\;\;\;\;\frac{\frac{\frac{\sqrt{\mathsf{fma}\left(c \cdot -4, a, b \cdot b\right)} \cdot \mathsf{fma}\left(c \cdot -4, a, b \cdot b\right) - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(b, \sqrt{\mathsf{fma}\left(c \cdot -4, a, b \cdot b\right)}, b \cdot b + \mathsf{fma}\left(c \cdot -4, a, b \cdot b\right)\right)}}{a}}{2}\\

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

\end{array}
double f(double a, double b, double c) {
        double r545899 = b;
        double r545900 = -r545899;
        double r545901 = r545899 * r545899;
        double r545902 = 4.0;
        double r545903 = a;
        double r545904 = r545902 * r545903;
        double r545905 = c;
        double r545906 = r545904 * r545905;
        double r545907 = r545901 - r545906;
        double r545908 = sqrt(r545907);
        double r545909 = r545900 + r545908;
        double r545910 = 2.0;
        double r545911 = r545910 * r545903;
        double r545912 = r545909 / r545911;
        return r545912;
}

double f(double a, double b, double c) {
        double r545913 = b;
        double r545914 = 0.09946845057046652;
        bool r545915 = r545913 <= r545914;
        double r545916 = c;
        double r545917 = -4.0;
        double r545918 = r545916 * r545917;
        double r545919 = a;
        double r545920 = r545913 * r545913;
        double r545921 = fma(r545918, r545919, r545920);
        double r545922 = sqrt(r545921);
        double r545923 = r545922 * r545921;
        double r545924 = r545920 * r545913;
        double r545925 = r545923 - r545924;
        double r545926 = r545920 + r545921;
        double r545927 = fma(r545913, r545922, r545926);
        double r545928 = r545925 / r545927;
        double r545929 = r545928 / r545919;
        double r545930 = 2.0;
        double r545931 = r545929 / r545930;
        double r545932 = -2.0;
        double r545933 = r545916 / r545913;
        double r545934 = r545932 * r545933;
        double r545935 = r545934 / r545930;
        double r545936 = r545915 ? r545931 : r545935;
        return r545936;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

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

    1. Initial program 24.0

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

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

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

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

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

    if 0.09946845057046652 < b

    1. Initial program 47.7

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

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

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

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

Reproduce

herbie shell --seed 2019152 +o rules:numerics
(FPCore (a b c)
  :name "Quadratic roots, medium range"
  :pre (and (< 1.1102230246251565e-16 a 9007199254740992.0) (< 1.1102230246251565e-16 b 9007199254740992.0) (< 1.1102230246251565e-16 c 9007199254740992.0))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))