Average Error: 34.3 → 10.5
Time: 17.2s
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.566577234736048594271680252121402983446 \cdot 10^{69}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 2.649990358912618894034395734880511734682 \cdot 10^{-53}:\\ \;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\ \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.566577234736048594271680252121402983446 \cdot 10^{69}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r40289 = b;
        double r40290 = -r40289;
        double r40291 = r40289 * r40289;
        double r40292 = 4.0;
        double r40293 = a;
        double r40294 = r40292 * r40293;
        double r40295 = c;
        double r40296 = r40294 * r40295;
        double r40297 = r40291 - r40296;
        double r40298 = sqrt(r40297);
        double r40299 = r40290 + r40298;
        double r40300 = 2.0;
        double r40301 = r40300 * r40293;
        double r40302 = r40299 / r40301;
        return r40302;
}

double f(double a, double b, double c) {
        double r40303 = b;
        double r40304 = -1.5665772347360486e+69;
        bool r40305 = r40303 <= r40304;
        double r40306 = 1.0;
        double r40307 = c;
        double r40308 = r40307 / r40303;
        double r40309 = a;
        double r40310 = r40303 / r40309;
        double r40311 = r40308 - r40310;
        double r40312 = r40306 * r40311;
        double r40313 = 2.649990358912619e-53;
        bool r40314 = r40303 <= r40313;
        double r40315 = 1.0;
        double r40316 = 2.0;
        double r40317 = r40316 * r40309;
        double r40318 = r40303 * r40303;
        double r40319 = 4.0;
        double r40320 = r40319 * r40309;
        double r40321 = r40320 * r40307;
        double r40322 = r40318 - r40321;
        double r40323 = sqrt(r40322);
        double r40324 = r40323 - r40303;
        double r40325 = r40317 / r40324;
        double r40326 = r40315 / r40325;
        double r40327 = -1.0;
        double r40328 = r40327 * r40308;
        double r40329 = r40314 ? r40326 : r40328;
        double r40330 = r40305 ? r40312 : r40329;
        return r40330;
}

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 < -1.5665772347360486e+69

    1. Initial program 41.7

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

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

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

    if -1.5665772347360486e+69 < b < 2.649990358912619e-53

    1. Initial program 14.6

      \[\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-num14.7

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

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

    if 2.649990358912619e-53 < b

    1. Initial program 54.0

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

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

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

Reproduce

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