Average Error: 33.5 → 10.5
Time: 26.7s
Precision: 64
\[\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 -227369802444031.66:\\ \;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\ \mathbf{elif}\;b \le 2.0617732603635578 \cdot 10^{-61}:\\ \;\;\;\;\frac{\frac{1}{a} \cdot \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} + b \cdot \frac{-1}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{c}{b} \cdot -2}{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 -227369802444031.66:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\

\mathbf{elif}\;b \le 2.0617732603635578 \cdot 10^{-61}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} + b \cdot \frac{-1}{a}}{2}\\

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

\end{array}
double f(double a, double b, double c) {
        double r1258608 = b;
        double r1258609 = -r1258608;
        double r1258610 = r1258608 * r1258608;
        double r1258611 = 4.0;
        double r1258612 = a;
        double r1258613 = r1258611 * r1258612;
        double r1258614 = c;
        double r1258615 = r1258613 * r1258614;
        double r1258616 = r1258610 - r1258615;
        double r1258617 = sqrt(r1258616);
        double r1258618 = r1258609 + r1258617;
        double r1258619 = 2.0;
        double r1258620 = r1258619 * r1258612;
        double r1258621 = r1258618 / r1258620;
        return r1258621;
}

double f(double a, double b, double c) {
        double r1258622 = b;
        double r1258623 = -227369802444031.66;
        bool r1258624 = r1258622 <= r1258623;
        double r1258625 = c;
        double r1258626 = r1258625 / r1258622;
        double r1258627 = a;
        double r1258628 = r1258622 / r1258627;
        double r1258629 = r1258626 - r1258628;
        double r1258630 = 2.0;
        double r1258631 = r1258629 * r1258630;
        double r1258632 = r1258631 / r1258630;
        double r1258633 = 2.0617732603635578e-61;
        bool r1258634 = r1258622 <= r1258633;
        double r1258635 = 1.0;
        double r1258636 = r1258635 / r1258627;
        double r1258637 = r1258622 * r1258622;
        double r1258638 = 4.0;
        double r1258639 = r1258625 * r1258627;
        double r1258640 = r1258638 * r1258639;
        double r1258641 = r1258637 - r1258640;
        double r1258642 = sqrt(r1258641);
        double r1258643 = r1258636 * r1258642;
        double r1258644 = -1.0;
        double r1258645 = r1258644 / r1258627;
        double r1258646 = r1258622 * r1258645;
        double r1258647 = r1258643 + r1258646;
        double r1258648 = r1258647 / r1258630;
        double r1258649 = -2.0;
        double r1258650 = r1258626 * r1258649;
        double r1258651 = r1258650 / r1258630;
        double r1258652 = r1258634 ? r1258648 : r1258651;
        double r1258653 = r1258624 ? r1258632 : r1258652;
        return r1258653;
}

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 3 regimes
  2. if b < -227369802444031.66

    1. Initial program 32.9

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

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

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

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

      \[\leadsto \frac{\color{blue}{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}}{2}\]

    if -227369802444031.66 < b < 2.0617732603635578e-61

    1. Initial program 14.9

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

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

      \[\leadsto \frac{\color{blue}{\left(\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} - b\right) \cdot \frac{1}{a}}}{2}\]
    5. Using strategy rm
    6. Applied *-commutative15.0

      \[\leadsto \frac{\color{blue}{\frac{1}{a} \cdot \left(\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} - b\right)}}{2}\]
    7. Using strategy rm
    8. Applied sub-neg15.0

      \[\leadsto \frac{\frac{1}{a} \cdot \color{blue}{\left(\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} + \left(-b\right)\right)}}{2}\]
    9. Applied distribute-rgt-in15.0

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

    if 2.0617732603635578e-61 < b

    1. Initial program 52.8

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -227369802444031.66:\\ \;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\ \mathbf{elif}\;b \le 2.0617732603635578 \cdot 10^{-61}:\\ \;\;\;\;\frac{\frac{1}{a} \cdot \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} + b \cdot \frac{-1}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019146 
(FPCore (a b c)
  :name "Quadratic roots, full range"
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))