Average Error: 34.5 → 10.2
Time: 4.0s
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 -4.706781135059311758856471716413486308072 \cdot 10^{-92}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 5.722235152988638272816037483919181313619 \cdot 10^{98}:\\ \;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \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 -4.706781135059311758856471716413486308072 \cdot 10^{-92}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r85849 = b;
        double r85850 = -r85849;
        double r85851 = r85849 * r85849;
        double r85852 = 4.0;
        double r85853 = a;
        double r85854 = c;
        double r85855 = r85853 * r85854;
        double r85856 = r85852 * r85855;
        double r85857 = r85851 - r85856;
        double r85858 = sqrt(r85857);
        double r85859 = r85850 - r85858;
        double r85860 = 2.0;
        double r85861 = r85860 * r85853;
        double r85862 = r85859 / r85861;
        return r85862;
}

double f(double a, double b, double c) {
        double r85863 = b;
        double r85864 = -4.706781135059312e-92;
        bool r85865 = r85863 <= r85864;
        double r85866 = -1.0;
        double r85867 = c;
        double r85868 = r85867 / r85863;
        double r85869 = r85866 * r85868;
        double r85870 = 5.722235152988638e+98;
        bool r85871 = r85863 <= r85870;
        double r85872 = -r85863;
        double r85873 = r85863 * r85863;
        double r85874 = 4.0;
        double r85875 = a;
        double r85876 = r85875 * r85867;
        double r85877 = r85874 * r85876;
        double r85878 = r85873 - r85877;
        double r85879 = sqrt(r85878);
        double r85880 = r85872 - r85879;
        double r85881 = 1.0;
        double r85882 = 2.0;
        double r85883 = r85882 * r85875;
        double r85884 = r85881 / r85883;
        double r85885 = r85880 * r85884;
        double r85886 = 1.0;
        double r85887 = r85863 / r85875;
        double r85888 = r85868 - r85887;
        double r85889 = r85886 * r85888;
        double r85890 = r85871 ? r85885 : r85889;
        double r85891 = r85865 ? r85869 : r85890;
        return r85891;
}

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.5
Target21.5
Herbie10.2
\[\begin{array}{l} \mathbf{if}\;b \lt 0.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 < -4.706781135059312e-92

    1. Initial program 52.4

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

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

    if -4.706781135059312e-92 < b < 5.722235152988638e+98

    1. Initial program 12.7

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

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

    if 5.722235152988638e+98 < b

    1. Initial program 47.2

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -4.706781135059311758856471716413486308072 \cdot 10^{-92}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 5.722235152988638272816037483919181313619 \cdot 10^{98}:\\ \;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019353 
(FPCore (a b c)
  :name "The quadratic formula (r2)"
  :precision binary64

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