Average Error: 34.2 → 8.9
Time: 13.9s
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 -1.50529903241060843 \cdot 10^{27}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le -6.63395785424786023 \cdot 10^{-258}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{elif}\;b \le 1.16896907782470713 \cdot 10^{-19}:\\ \;\;\;\;\frac{\frac{1}{\frac{\frac{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4}}{a}}{c}}}{2 \cdot a}\\ \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 -1.50529903241060843 \cdot 10^{27}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r93480 = b;
        double r93481 = -r93480;
        double r93482 = r93480 * r93480;
        double r93483 = 4.0;
        double r93484 = a;
        double r93485 = r93483 * r93484;
        double r93486 = c;
        double r93487 = r93485 * r93486;
        double r93488 = r93482 - r93487;
        double r93489 = sqrt(r93488);
        double r93490 = r93481 + r93489;
        double r93491 = 2.0;
        double r93492 = r93491 * r93484;
        double r93493 = r93490 / r93492;
        return r93493;
}

double f(double a, double b, double c) {
        double r93494 = b;
        double r93495 = -1.5052990324106084e+27;
        bool r93496 = r93494 <= r93495;
        double r93497 = 1.0;
        double r93498 = c;
        double r93499 = r93498 / r93494;
        double r93500 = a;
        double r93501 = r93494 / r93500;
        double r93502 = r93499 - r93501;
        double r93503 = r93497 * r93502;
        double r93504 = -6.63395785424786e-258;
        bool r93505 = r93494 <= r93504;
        double r93506 = -r93494;
        double r93507 = r93494 * r93494;
        double r93508 = 4.0;
        double r93509 = r93508 * r93500;
        double r93510 = r93509 * r93498;
        double r93511 = r93507 - r93510;
        double r93512 = sqrt(r93511);
        double r93513 = r93506 + r93512;
        double r93514 = 1.0;
        double r93515 = 2.0;
        double r93516 = r93515 * r93500;
        double r93517 = r93514 / r93516;
        double r93518 = r93513 * r93517;
        double r93519 = 1.1689690778247071e-19;
        bool r93520 = r93494 <= r93519;
        double r93521 = r93506 - r93512;
        double r93522 = r93521 / r93508;
        double r93523 = r93522 / r93500;
        double r93524 = r93523 / r93498;
        double r93525 = r93514 / r93524;
        double r93526 = r93525 / r93516;
        double r93527 = -1.0;
        double r93528 = r93527 * r93499;
        double r93529 = r93520 ? r93526 : r93528;
        double r93530 = r93505 ? r93518 : r93529;
        double r93531 = r93496 ? r93503 : r93530;
        return r93531;
}

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 4 regimes
  2. if b < -1.5052990324106084e+27

    1. Initial program 35.7

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

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

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

    if -1.5052990324106084e+27 < b < -6.63395785424786e-258

    1. Initial program 9.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 div-inv9.1

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

    if -6.63395785424786e-258 < b < 1.1689690778247071e-19

    1. Initial program 23.8

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

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

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

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

      \[\leadsto \frac{\frac{1}{\color{blue}{\frac{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4}}{a \cdot c}}}}{2 \cdot a}\]
    8. Using strategy rm
    9. Applied associate-/r*15.2

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

    if 1.1689690778247071e-19 < b

    1. Initial program 55.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.50529903241060843 \cdot 10^{27}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le -6.63395785424786023 \cdot 10^{-258}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{elif}\;b \le 1.16896907782470713 \cdot 10^{-19}:\\ \;\;\;\;\frac{\frac{1}{\frac{\frac{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4}}{a}}{c}}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

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