Average Error: 33.3 → 9.6
Time: 1.6m
Precision: 64
\[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -1.2303558036345968 \cdot 10^{-110}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 5.869467752933353 \cdot 10^{+121}:\\ \;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{(\left(c \cdot a\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \end{array}\]
\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -1.2303558036345968 \cdot 10^{-110}:\\
\;\;\;\;-\frac{c}{b}\\

\mathbf{elif}\;b \le 5.869467752933353 \cdot 10^{+121}:\\
\;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{(\left(c \cdot a\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}\\

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

\end{array}
double f(double a, double b, double c) {
        double r7384903 = b;
        double r7384904 = -r7384903;
        double r7384905 = r7384903 * r7384903;
        double r7384906 = 4.0;
        double r7384907 = a;
        double r7384908 = c;
        double r7384909 = r7384907 * r7384908;
        double r7384910 = r7384906 * r7384909;
        double r7384911 = r7384905 - r7384910;
        double r7384912 = sqrt(r7384911);
        double r7384913 = r7384904 - r7384912;
        double r7384914 = 2.0;
        double r7384915 = r7384914 * r7384907;
        double r7384916 = r7384913 / r7384915;
        return r7384916;
}

double f(double a, double b, double c) {
        double r7384917 = b;
        double r7384918 = -1.2303558036345968e-110;
        bool r7384919 = r7384917 <= r7384918;
        double r7384920 = c;
        double r7384921 = r7384920 / r7384917;
        double r7384922 = -r7384921;
        double r7384923 = 5.869467752933353e+121;
        bool r7384924 = r7384917 <= r7384923;
        double r7384925 = -r7384917;
        double r7384926 = a;
        double r7384927 = r7384920 * r7384926;
        double r7384928 = -4.0;
        double r7384929 = r7384917 * r7384917;
        double r7384930 = fma(r7384927, r7384928, r7384929);
        double r7384931 = sqrt(r7384930);
        double r7384932 = r7384925 - r7384931;
        double r7384933 = 2.0;
        double r7384934 = r7384932 / r7384933;
        double r7384935 = r7384934 / r7384926;
        double r7384936 = r7384917 / r7384926;
        double r7384937 = r7384921 - r7384936;
        double r7384938 = r7384924 ? r7384935 : r7384937;
        double r7384939 = r7384919 ? r7384922 : r7384938;
        return r7384939;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.3
Target20.2
Herbie9.6
\[\begin{array}{l} \mathbf{if}\;b \lt 0:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if b < -1.2303558036345968e-110

    1. Initial program 50.8

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

      \[\leadsto \color{blue}{\frac{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}}\]
    3. Taylor expanded around inf 50.8

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

      \[\leadsto \frac{\frac{\left(-b\right) - \sqrt{\color{blue}{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}}{2}}{a}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity50.8

      \[\leadsto \frac{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{\color{blue}{1 \cdot a}}\]
    7. Applied div-inv50.8

      \[\leadsto \frac{\color{blue}{\left(\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}\right) \cdot \frac{1}{2}}}{1 \cdot a}\]
    8. Applied times-frac50.8

      \[\leadsto \color{blue}{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{1} \cdot \frac{\frac{1}{2}}{a}}\]
    9. Simplified50.8

      \[\leadsto \color{blue}{\left(-\left(b + \sqrt{(a \cdot \left(c \cdot -4\right) + \left(b \cdot b\right))_*}\right)\right)} \cdot \frac{\frac{1}{2}}{a}\]
    10. Simplified50.8

      \[\leadsto \left(-\left(b + \sqrt{(a \cdot \left(c \cdot -4\right) + \left(b \cdot b\right))_*}\right)\right) \cdot \color{blue}{\frac{\frac{1}{2}}{a}}\]
    11. Taylor expanded around -inf 10.2

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
    12. Simplified10.2

      \[\leadsto \color{blue}{-\frac{c}{b}}\]

    if -1.2303558036345968e-110 < b < 5.869467752933353e+121

    1. Initial program 11.0

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified11.0

      \[\leadsto \color{blue}{\frac{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}}\]
    3. Taylor expanded around inf 11.0

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

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

    if 5.869467752933353e+121 < b

    1. Initial program 51.7

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

      \[\leadsto \color{blue}{\frac{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}}\]
    3. Taylor expanded around inf 51.7

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

      \[\leadsto \frac{\frac{\left(-b\right) - \sqrt{\color{blue}{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}}{2}}{a}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity51.7

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

      \[\leadsto \frac{\color{blue}{\left(\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}\right) \cdot \frac{1}{2}}}{1 \cdot a}\]
    8. Applied times-frac51.7

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

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

      \[\leadsto \left(-\left(b + \sqrt{(a \cdot \left(c \cdot -4\right) + \left(b \cdot b\right))_*}\right)\right) \cdot \color{blue}{\frac{\frac{1}{2}}{a}}\]
    11. Taylor expanded around inf 3.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.2303558036345968 \cdot 10^{-110}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 5.869467752933353 \cdot 10^{+121}:\\ \;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{(\left(c \cdot a\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2019119 +o rules:numerics
(FPCore (a b c)
  :name "The quadratic formula (r2)"

  :herbie-target
  (if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))

  (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))