Average Error: 34.2 → 15.1
Time: 8.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 -1.3358786167585806 \cdot 10^{154}:\\ \;\;\;\;\frac{\mathsf{fma}\left(2, \frac{a \cdot c}{b}, b \cdot -2\right)}{2 \cdot a}\\ \mathbf{elif}\;b \le 1.94263717460376656 \cdot 10^{24}:\\ \;\;\;\;\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2 \cdot \frac{a \cdot c}{b}}{2 \cdot a}\\ \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.3358786167585806 \cdot 10^{154}:\\
\;\;\;\;\frac{\mathsf{fma}\left(2, \frac{a \cdot c}{b}, b \cdot -2\right)}{2 \cdot a}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r41712 = b;
        double r41713 = -r41712;
        double r41714 = r41712 * r41712;
        double r41715 = 4.0;
        double r41716 = a;
        double r41717 = r41715 * r41716;
        double r41718 = c;
        double r41719 = r41717 * r41718;
        double r41720 = r41714 - r41719;
        double r41721 = sqrt(r41720);
        double r41722 = r41713 + r41721;
        double r41723 = 2.0;
        double r41724 = r41723 * r41716;
        double r41725 = r41722 / r41724;
        return r41725;
}

double f(double a, double b, double c) {
        double r41726 = b;
        double r41727 = -1.3358786167585806e+154;
        bool r41728 = r41726 <= r41727;
        double r41729 = 2.0;
        double r41730 = a;
        double r41731 = c;
        double r41732 = r41730 * r41731;
        double r41733 = r41732 / r41726;
        double r41734 = -2.0;
        double r41735 = r41726 * r41734;
        double r41736 = fma(r41729, r41733, r41735);
        double r41737 = r41729 * r41730;
        double r41738 = r41736 / r41737;
        double r41739 = 1.9426371746037666e+24;
        bool r41740 = r41726 <= r41739;
        double r41741 = r41726 * r41726;
        double r41742 = 4.0;
        double r41743 = r41742 * r41730;
        double r41744 = r41743 * r41731;
        double r41745 = r41741 - r41744;
        double r41746 = sqrt(r41745);
        double r41747 = r41746 - r41726;
        double r41748 = r41747 / r41737;
        double r41749 = -2.0;
        double r41750 = r41749 * r41733;
        double r41751 = r41750 / r41737;
        double r41752 = r41740 ? r41748 : r41751;
        double r41753 = r41728 ? r41738 : r41752;
        return r41753;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

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

    1. Initial program 64.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 add-exp-log64.0

      \[\leadsto \frac{\color{blue}{e^{\log \left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}}}{2 \cdot a}\]
    4. Simplified64.0

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

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

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

    if -1.3358786167585806e+154 < b < 1.9426371746037666e+24

    1. Initial program 16.1

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

      \[\leadsto \frac{\color{blue}{e^{\log \left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}}}{2 \cdot a}\]
    4. Simplified19.6

      \[\leadsto \frac{e^{\color{blue}{\log \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b\right)}}}{2 \cdot a}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity19.6

      \[\leadsto \frac{e^{\log \color{blue}{\left(1 \cdot \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b\right)\right)}}}{2 \cdot a}\]
    7. Applied log-prod19.6

      \[\leadsto \frac{e^{\color{blue}{\log 1 + \log \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b\right)}}}{2 \cdot a}\]
    8. Applied exp-sum19.6

      \[\leadsto \frac{\color{blue}{e^{\log 1} \cdot e^{\log \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b\right)}}}{2 \cdot a}\]
    9. Simplified19.6

      \[\leadsto \frac{\color{blue}{1} \cdot e^{\log \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b\right)}}{2 \cdot a}\]
    10. Simplified16.1

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

    if 1.9426371746037666e+24 < b

    1. Initial program 56.4

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

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

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

Reproduce

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