Average Error: 34.4 → 8.4
Time: 44.7s
Precision: 64
\[\frac{\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}{2.0 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -3.234164035284793 \cdot 10^{+22}:\\ \;\;\;\;-1.0 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -2.4242286502051438 \cdot 10^{-135}:\\ \;\;\;\;\frac{\frac{\left(b \cdot b - b \cdot b\right) + 4.0 \cdot \left(c \cdot a\right)}{\sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)} - b}}{2.0 \cdot a}\\ \mathbf{elif}\;b \le 1.7205132563858266 \cdot 10^{+103}:\\ \;\;\;\;\frac{1}{2.0 \cdot a} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)}\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1.0\\ \end{array}\]
\frac{\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}{2.0 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -3.234164035284793 \cdot 10^{+22}:\\
\;\;\;\;-1.0 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le -2.4242286502051438 \cdot 10^{-135}:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - b \cdot b\right) + 4.0 \cdot \left(c \cdot a\right)}{\sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)} - b}}{2.0 \cdot a}\\

\mathbf{elif}\;b \le 1.7205132563858266 \cdot 10^{+103}:\\
\;\;\;\;\frac{1}{2.0 \cdot a} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)}\right)\\

\mathbf{else}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1.0\\

\end{array}
double f(double a, double b, double c) {
        double r3852887 = b;
        double r3852888 = -r3852887;
        double r3852889 = r3852887 * r3852887;
        double r3852890 = 4.0;
        double r3852891 = a;
        double r3852892 = c;
        double r3852893 = r3852891 * r3852892;
        double r3852894 = r3852890 * r3852893;
        double r3852895 = r3852889 - r3852894;
        double r3852896 = sqrt(r3852895);
        double r3852897 = r3852888 - r3852896;
        double r3852898 = 2.0;
        double r3852899 = r3852898 * r3852891;
        double r3852900 = r3852897 / r3852899;
        return r3852900;
}

double f(double a, double b, double c) {
        double r3852901 = b;
        double r3852902 = -3.234164035284793e+22;
        bool r3852903 = r3852901 <= r3852902;
        double r3852904 = -1.0;
        double r3852905 = c;
        double r3852906 = r3852905 / r3852901;
        double r3852907 = r3852904 * r3852906;
        double r3852908 = -2.4242286502051438e-135;
        bool r3852909 = r3852901 <= r3852908;
        double r3852910 = r3852901 * r3852901;
        double r3852911 = r3852910 - r3852910;
        double r3852912 = 4.0;
        double r3852913 = a;
        double r3852914 = r3852905 * r3852913;
        double r3852915 = r3852912 * r3852914;
        double r3852916 = r3852911 + r3852915;
        double r3852917 = r3852910 - r3852915;
        double r3852918 = sqrt(r3852917);
        double r3852919 = r3852918 - r3852901;
        double r3852920 = r3852916 / r3852919;
        double r3852921 = 2.0;
        double r3852922 = r3852921 * r3852913;
        double r3852923 = r3852920 / r3852922;
        double r3852924 = 1.7205132563858266e+103;
        bool r3852925 = r3852901 <= r3852924;
        double r3852926 = 1.0;
        double r3852927 = r3852926 / r3852922;
        double r3852928 = -r3852901;
        double r3852929 = r3852928 - r3852918;
        double r3852930 = r3852927 * r3852929;
        double r3852931 = r3852901 / r3852913;
        double r3852932 = r3852906 - r3852931;
        double r3852933 = 1.0;
        double r3852934 = r3852932 * r3852933;
        double r3852935 = r3852925 ? r3852930 : r3852934;
        double r3852936 = r3852909 ? r3852923 : r3852935;
        double r3852937 = r3852903 ? r3852907 : r3852936;
        return r3852937;
}

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

Target

Original34.4
Target21.3
Herbie8.4
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}{2.0 \cdot a}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}{2.0 \cdot a}\\ \end{array}\]

Derivation

  1. Split input into 4 regimes
  2. if b < -3.234164035284793e+22

    1. Initial program 56.6

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}{2.0 \cdot a}\]
    2. Taylor expanded around -inf 4.6

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

    if -3.234164035284793e+22 < b < -2.4242286502051438e-135

    1. Initial program 36.3

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

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

      \[\leadsto \frac{\frac{\color{blue}{\left(b \cdot b - b \cdot b\right) + 4.0 \cdot \left(a \cdot c\right)}}{\left(-b\right) + \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}}{2.0 \cdot a}\]
    5. Simplified16.2

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

    if -2.4242286502051438e-135 < b < 1.7205132563858266e+103

    1. Initial program 11.0

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}{2.0 \cdot a}\]
    2. Using strategy rm
    3. Applied div-inv11.2

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

    if 1.7205132563858266e+103 < b

    1. Initial program 47.4

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

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

      \[\leadsto \frac{\frac{\color{blue}{\left(b \cdot b - b \cdot b\right) + 4.0 \cdot \left(a \cdot c\right)}}{\left(-b\right) + \sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)}}}{2.0 \cdot a}\]
    5. Simplified63.2

      \[\leadsto \frac{\frac{\left(b \cdot b - b \cdot b\right) + 4.0 \cdot \left(a \cdot c\right)}{\color{blue}{\sqrt{b \cdot b - 4.0 \cdot \left(a \cdot c\right)} - b}}}{2.0 \cdot a}\]
    6. Taylor expanded around inf 3.2

      \[\leadsto \color{blue}{1.0 \cdot \frac{c}{b} - 1.0 \cdot \frac{b}{a}}\]
    7. Simplified3.2

      \[\leadsto \color{blue}{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1.0}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification8.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3.234164035284793 \cdot 10^{+22}:\\ \;\;\;\;-1.0 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -2.4242286502051438 \cdot 10^{-135}:\\ \;\;\;\;\frac{\frac{\left(b \cdot b - b \cdot b\right) + 4.0 \cdot \left(c \cdot a\right)}{\sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)} - b}}{2.0 \cdot a}\\ \mathbf{elif}\;b \le 1.7205132563858266 \cdot 10^{+103}:\\ \;\;\;\;\frac{1}{2.0 \cdot a} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4.0 \cdot \left(c \cdot a\right)}\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1.0\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))

  (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))