Average Error: 33.3 → 13.8
Time: 19.6s
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.3307746224770355 \cdot 10^{+154}:\\ \;\;\;\;\frac{\frac{\left(\frac{a}{b} \cdot c - b\right) \cdot 2}{a}}{2}\\ \mathbf{elif}\;b \le 1.502588793204478 \cdot 10^{-55}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, a \cdot \left(-4 \cdot c\right)\right)} - b}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{c \cdot a}{b} \cdot -2}{a}}{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 -1.3307746224770355 \cdot 10^{+154}:\\
\;\;\;\;\frac{\frac{\left(\frac{a}{b} \cdot c - b\right) \cdot 2}{a}}{2}\\

\mathbf{elif}\;b \le 1.502588793204478 \cdot 10^{-55}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, a \cdot \left(-4 \cdot c\right)\right)} - b}{a}}{2}\\

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

\end{array}
double f(double a, double b, double c) {
        double r820110 = b;
        double r820111 = -r820110;
        double r820112 = r820110 * r820110;
        double r820113 = 4.0;
        double r820114 = a;
        double r820115 = r820113 * r820114;
        double r820116 = c;
        double r820117 = r820115 * r820116;
        double r820118 = r820112 - r820117;
        double r820119 = sqrt(r820118);
        double r820120 = r820111 + r820119;
        double r820121 = 2.0;
        double r820122 = r820121 * r820114;
        double r820123 = r820120 / r820122;
        return r820123;
}

double f(double a, double b, double c) {
        double r820124 = b;
        double r820125 = -1.3307746224770355e+154;
        bool r820126 = r820124 <= r820125;
        double r820127 = a;
        double r820128 = r820127 / r820124;
        double r820129 = c;
        double r820130 = r820128 * r820129;
        double r820131 = r820130 - r820124;
        double r820132 = 2.0;
        double r820133 = r820131 * r820132;
        double r820134 = r820133 / r820127;
        double r820135 = r820134 / r820132;
        double r820136 = 1.502588793204478e-55;
        bool r820137 = r820124 <= r820136;
        double r820138 = -4.0;
        double r820139 = r820138 * r820129;
        double r820140 = r820127 * r820139;
        double r820141 = fma(r820124, r820124, r820140);
        double r820142 = sqrt(r820141);
        double r820143 = r820142 - r820124;
        double r820144 = r820143 / r820127;
        double r820145 = r820144 / r820132;
        double r820146 = r820129 * r820127;
        double r820147 = r820146 / r820124;
        double r820148 = -2.0;
        double r820149 = r820147 * r820148;
        double r820150 = r820149 / r820127;
        double r820151 = r820150 / r820132;
        double r820152 = r820137 ? r820145 : r820151;
        double r820153 = r820126 ? r820135 : r820152;
        return r820153;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b < -1.3307746224770355e+154

    1. Initial program 60.9

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied associate-*l*60.9

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

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

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

    if -1.3307746224770355e+154 < b < 1.502588793204478e-55

    1. Initial program 12.7

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied associate-*l*12.7

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

    if 1.502588793204478e-55 < 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. Simplified52.9

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.3307746224770355 \cdot 10^{+154}:\\ \;\;\;\;\frac{\frac{\left(\frac{a}{b} \cdot c - b\right) \cdot 2}{a}}{2}\\ \mathbf{elif}\;b \le 1.502588793204478 \cdot 10^{-55}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, a \cdot \left(-4 \cdot c\right)\right)} - b}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{c \cdot a}{b} \cdot -2}{a}}{2}\\ \end{array}\]

Reproduce

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