Average Error: 34.0 → 9.6
Time: 5.1s
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 -3.5940112039867074 \cdot 10^{100}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 2.267195199467958 \cdot 10^{-82}:\\ \;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \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 -3.5940112039867074 \cdot 10^{100}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r57560 = b;
        double r57561 = -r57560;
        double r57562 = r57560 * r57560;
        double r57563 = 4.0;
        double r57564 = a;
        double r57565 = r57563 * r57564;
        double r57566 = c;
        double r57567 = r57565 * r57566;
        double r57568 = r57562 - r57567;
        double r57569 = sqrt(r57568);
        double r57570 = r57561 + r57569;
        double r57571 = 2.0;
        double r57572 = r57571 * r57564;
        double r57573 = r57570 / r57572;
        return r57573;
}

double f(double a, double b, double c) {
        double r57574 = b;
        double r57575 = -3.5940112039867074e+100;
        bool r57576 = r57574 <= r57575;
        double r57577 = 1.0;
        double r57578 = c;
        double r57579 = r57578 / r57574;
        double r57580 = a;
        double r57581 = r57574 / r57580;
        double r57582 = r57579 - r57581;
        double r57583 = r57577 * r57582;
        double r57584 = 2.267195199467958e-82;
        bool r57585 = r57574 <= r57584;
        double r57586 = 1.0;
        double r57587 = 2.0;
        double r57588 = r57587 * r57580;
        double r57589 = -r57574;
        double r57590 = r57574 * r57574;
        double r57591 = 4.0;
        double r57592 = r57591 * r57580;
        double r57593 = r57592 * r57578;
        double r57594 = r57590 - r57593;
        double r57595 = sqrt(r57594);
        double r57596 = r57589 + r57595;
        double r57597 = r57588 / r57596;
        double r57598 = r57586 / r57597;
        double r57599 = -1.0;
        double r57600 = r57599 * r57579;
        double r57601 = r57585 ? r57598 : r57600;
        double r57602 = r57576 ? r57583 : r57601;
        return r57602;
}

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 < -3.5940112039867074e+100

    1. Initial program 47.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Taylor expanded around -inf 3.8

      \[\leadsto \color{blue}{1 \cdot \frac{c}{b} - 1 \cdot \frac{b}{a}}\]
    3. Simplified3.8

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

    if -3.5940112039867074e+100 < b < 2.267195199467958e-82

    1. Initial program 12.0

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Using strategy rm
    3. Applied clear-num12.1

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

    if 2.267195199467958e-82 < b

    1. Initial program 52.9

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Taylor expanded around inf 9.0

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

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

Reproduce

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