Average Error: 33.0 → 10.9
Time: 18.7s
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 -9.348931433494438 \cdot 10^{+39}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 1.3353078790738604 \cdot 10^{-121}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)}\right) \cdot \frac{\frac{1}{2}}{a}\\ \mathbf{elif}\;b \le 1.6168702840263923 \cdot 10^{-79}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 1.546013236023957 \cdot 10^{-67}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)}\right) \cdot \frac{\frac{1}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;-\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 -9.348931433494438 \cdot 10^{+39}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\

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

\mathbf{elif}\;b \le 1.6168702840263923 \cdot 10^{-79}:\\
\;\;\;\;-\frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r7033916 = b;
        double r7033917 = -r7033916;
        double r7033918 = r7033916 * r7033916;
        double r7033919 = 4.0;
        double r7033920 = a;
        double r7033921 = r7033919 * r7033920;
        double r7033922 = c;
        double r7033923 = r7033921 * r7033922;
        double r7033924 = r7033918 - r7033923;
        double r7033925 = sqrt(r7033924);
        double r7033926 = r7033917 + r7033925;
        double r7033927 = 2.0;
        double r7033928 = r7033927 * r7033920;
        double r7033929 = r7033926 / r7033928;
        return r7033929;
}

double f(double a, double b, double c) {
        double r7033930 = b;
        double r7033931 = -9.348931433494438e+39;
        bool r7033932 = r7033930 <= r7033931;
        double r7033933 = c;
        double r7033934 = r7033933 / r7033930;
        double r7033935 = a;
        double r7033936 = r7033930 / r7033935;
        double r7033937 = r7033934 - r7033936;
        double r7033938 = 1.3353078790738604e-121;
        bool r7033939 = r7033930 <= r7033938;
        double r7033940 = -r7033930;
        double r7033941 = r7033930 * r7033930;
        double r7033942 = 4.0;
        double r7033943 = r7033942 * r7033935;
        double r7033944 = r7033933 * r7033943;
        double r7033945 = r7033941 - r7033944;
        double r7033946 = sqrt(r7033945);
        double r7033947 = r7033940 + r7033946;
        double r7033948 = 0.5;
        double r7033949 = r7033948 / r7033935;
        double r7033950 = r7033947 * r7033949;
        double r7033951 = 1.6168702840263923e-79;
        bool r7033952 = r7033930 <= r7033951;
        double r7033953 = -r7033934;
        double r7033954 = 1.546013236023957e-67;
        bool r7033955 = r7033930 <= r7033954;
        double r7033956 = r7033955 ? r7033950 : r7033953;
        double r7033957 = r7033952 ? r7033953 : r7033956;
        double r7033958 = r7033939 ? r7033950 : r7033957;
        double r7033959 = r7033932 ? r7033937 : r7033958;
        return r7033959;
}

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

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

Derivation

  1. Split input into 3 regimes
  2. if b < -9.348931433494438e+39

    1. Initial program 34.0

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

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

    if -9.348931433494438e+39 < b < 1.3353078790738604e-121 or 1.6168702840263923e-79 < b < 1.546013236023957e-67

    1. Initial program 12.9

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Using strategy rm
    3. Applied div-inv13.0

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

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

    if 1.3353078790738604e-121 < b < 1.6168702840263923e-79 or 1.546013236023957e-67 < b

    1. Initial program 50.8

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -9.348931433494438 \cdot 10^{+39}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 1.3353078790738604 \cdot 10^{-121}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)}\right) \cdot \frac{\frac{1}{2}}{a}\\ \mathbf{elif}\;b \le 1.6168702840263923 \cdot 10^{-79}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 1.546013236023957 \cdot 10^{-67}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)}\right) \cdot \frac{\frac{1}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019158 
(FPCore (a b c)
  :name "The quadratic formula (r1)"

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

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