Average Error: 28.3 → 16.6
Time: 40.6s
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.0 \cdot a\right) \cdot c}}{2.0 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le 781.9086092205042:\\ \;\;\;\;\frac{\frac{\frac{\left(b \cdot b - c \cdot \left(a \cdot 4.0\right)\right) \cdot \sqrt{b \cdot b - c \cdot \left(a \cdot 4.0\right)} - \left(b \cdot b\right) \cdot b}{\left(b \cdot \sqrt{b \cdot b - c \cdot \left(a \cdot 4.0\right)} + \left(b \cdot b - c \cdot \left(a \cdot 4.0\right)\right)\right) + b \cdot b}}{a}}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2.0 \cdot \frac{c}{b}}{2.0}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4.0 \cdot a\right) \cdot c}}{2.0 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le 781.9086092205042:\\
\;\;\;\;\frac{\frac{\frac{\left(b \cdot b - c \cdot \left(a \cdot 4.0\right)\right) \cdot \sqrt{b \cdot b - c \cdot \left(a \cdot 4.0\right)} - \left(b \cdot b\right) \cdot b}{\left(b \cdot \sqrt{b \cdot b - c \cdot \left(a \cdot 4.0\right)} + \left(b \cdot b - c \cdot \left(a \cdot 4.0\right)\right)\right) + b \cdot b}}{a}}{2.0}\\

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

\end{array}
double f(double a, double b, double c) {
        double r1512576 = b;
        double r1512577 = -r1512576;
        double r1512578 = r1512576 * r1512576;
        double r1512579 = 4.0;
        double r1512580 = a;
        double r1512581 = r1512579 * r1512580;
        double r1512582 = c;
        double r1512583 = r1512581 * r1512582;
        double r1512584 = r1512578 - r1512583;
        double r1512585 = sqrt(r1512584);
        double r1512586 = r1512577 + r1512585;
        double r1512587 = 2.0;
        double r1512588 = r1512587 * r1512580;
        double r1512589 = r1512586 / r1512588;
        return r1512589;
}

double f(double a, double b, double c) {
        double r1512590 = b;
        double r1512591 = 781.9086092205042;
        bool r1512592 = r1512590 <= r1512591;
        double r1512593 = r1512590 * r1512590;
        double r1512594 = c;
        double r1512595 = a;
        double r1512596 = 4.0;
        double r1512597 = r1512595 * r1512596;
        double r1512598 = r1512594 * r1512597;
        double r1512599 = r1512593 - r1512598;
        double r1512600 = sqrt(r1512599);
        double r1512601 = r1512599 * r1512600;
        double r1512602 = r1512593 * r1512590;
        double r1512603 = r1512601 - r1512602;
        double r1512604 = r1512590 * r1512600;
        double r1512605 = r1512604 + r1512599;
        double r1512606 = r1512605 + r1512593;
        double r1512607 = r1512603 / r1512606;
        double r1512608 = r1512607 / r1512595;
        double r1512609 = 2.0;
        double r1512610 = r1512608 / r1512609;
        double r1512611 = -2.0;
        double r1512612 = r1512594 / r1512590;
        double r1512613 = r1512611 * r1512612;
        double r1512614 = r1512613 / r1512609;
        double r1512615 = r1512592 ? r1512610 : r1512614;
        return r1512615;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

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

    1. Initial program 16.8

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4.0} - b}{a}}{2.0}}\]
    3. Using strategy rm
    4. Applied flip3--16.9

      \[\leadsto \frac{\frac{\color{blue}{\frac{{\left(\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4.0}\right)}^{3} - {b}^{3}}{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4.0} \cdot \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4.0} + \left(b \cdot b + \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4.0} \cdot b\right)}}}{a}}{2.0}\]
    5. Simplified16.2

      \[\leadsto \frac{\frac{\frac{\color{blue}{\sqrt{b \cdot b - \left(a \cdot 4.0\right) \cdot c} \cdot \left(b \cdot b - \left(a \cdot 4.0\right) \cdot c\right) - b \cdot \left(b \cdot b\right)}}{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4.0} \cdot \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4.0} + \left(b \cdot b + \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4.0} \cdot b\right)}}{a}}{2.0}\]
    6. Simplified16.2

      \[\leadsto \frac{\frac{\frac{\sqrt{b \cdot b - \left(a \cdot 4.0\right) \cdot c} \cdot \left(b \cdot b - \left(a \cdot 4.0\right) \cdot c\right) - b \cdot \left(b \cdot b\right)}{\color{blue}{b \cdot b + \left(\left(b \cdot b - \left(a \cdot 4.0\right) \cdot c\right) + b \cdot \sqrt{b \cdot b - \left(a \cdot 4.0\right) \cdot c}\right)}}}{a}}{2.0}\]

    if 781.9086092205042 < b

    1. Initial program 35.6

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le 781.9086092205042:\\ \;\;\;\;\frac{\frac{\frac{\left(b \cdot b - c \cdot \left(a \cdot 4.0\right)\right) \cdot \sqrt{b \cdot b - c \cdot \left(a \cdot 4.0\right)} - \left(b \cdot b\right) \cdot b}{\left(b \cdot \sqrt{b \cdot b - c \cdot \left(a \cdot 4.0\right)} + \left(b \cdot b - c \cdot \left(a \cdot 4.0\right)\right)\right) + b \cdot b}}{a}}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2.0 \cdot \frac{c}{b}}{2.0}\\ \end{array}\]

Reproduce

herbie shell --seed 2019165 
(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.0 a) c)))) (* 2.0 a)))