Average Error: 34.7 → 10.1
Time: 6.8s
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.244774291407710824026233990502584030865 \cdot 10^{109}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 6.485606601696406255086078549712143397431 \cdot 10^{-71}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \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 -1.244774291407710824026233990502584030865 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r104860 = b;
        double r104861 = -r104860;
        double r104862 = r104860 * r104860;
        double r104863 = 4.0;
        double r104864 = a;
        double r104865 = r104863 * r104864;
        double r104866 = c;
        double r104867 = r104865 * r104866;
        double r104868 = r104862 - r104867;
        double r104869 = sqrt(r104868);
        double r104870 = r104861 + r104869;
        double r104871 = 2.0;
        double r104872 = r104871 * r104864;
        double r104873 = r104870 / r104872;
        return r104873;
}

double f(double a, double b, double c) {
        double r104874 = b;
        double r104875 = -1.2447742914077108e+109;
        bool r104876 = r104874 <= r104875;
        double r104877 = 1.0;
        double r104878 = c;
        double r104879 = r104878 / r104874;
        double r104880 = a;
        double r104881 = r104874 / r104880;
        double r104882 = r104879 - r104881;
        double r104883 = r104877 * r104882;
        double r104884 = 6.485606601696406e-71;
        bool r104885 = r104874 <= r104884;
        double r104886 = -r104874;
        double r104887 = r104874 * r104874;
        double r104888 = 4.0;
        double r104889 = r104888 * r104880;
        double r104890 = r104889 * r104878;
        double r104891 = r104887 - r104890;
        double r104892 = sqrt(r104891);
        double r104893 = r104886 + r104892;
        double r104894 = 1.0;
        double r104895 = 2.0;
        double r104896 = r104895 * r104880;
        double r104897 = r104894 / r104896;
        double r104898 = r104893 * r104897;
        double r104899 = -1.0;
        double r104900 = r104899 * r104879;
        double r104901 = r104885 ? r104898 : r104900;
        double r104902 = r104876 ? r104883 : r104901;
        return r104902;
}

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.7
Target21.5
Herbie10.1
\[\begin{array}{l} \mathbf{if}\;b \lt 0.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 < -1.2447742914077108e+109

    1. Initial program 49.3

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

      \[\leadsto \color{blue}{1 \cdot \frac{c}{b} - 1 \cdot \frac{b}{a}}\]
    3. Simplified4.0

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

    if -1.2447742914077108e+109 < b < 6.485606601696406e-71

    1. Initial program 13.5

      \[\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.6

      \[\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}}\]

    if 6.485606601696406e-71 < b

    1. Initial program 53.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.244774291407710824026233990502584030865 \cdot 10^{109}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 6.485606601696406255086078549712143397431 \cdot 10^{-71}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019353 +o rules:numerics
(FPCore (a b c)
  :name "The quadratic formula (r1)"
  :precision binary64

  :herbie-target
  (if (< b 0.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)))