Average Error: 34.1 → 10.5
Time: 18.3s
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 -9.332433396832084322962138528577137922234 \cdot 10^{-58}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 3.038903409991338138548211857189252856935 \cdot 10^{107}:\\ \;\;\;\;\left(-\frac{b}{2 \cdot a}\right) - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\ \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 -9.332433396832084322962138528577137922234 \cdot 10^{-58}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r3680701 = b;
        double r3680702 = -r3680701;
        double r3680703 = r3680701 * r3680701;
        double r3680704 = 4.0;
        double r3680705 = a;
        double r3680706 = c;
        double r3680707 = r3680705 * r3680706;
        double r3680708 = r3680704 * r3680707;
        double r3680709 = r3680703 - r3680708;
        double r3680710 = sqrt(r3680709);
        double r3680711 = r3680702 - r3680710;
        double r3680712 = 2.0;
        double r3680713 = r3680712 * r3680705;
        double r3680714 = r3680711 / r3680713;
        return r3680714;
}

double f(double a, double b, double c) {
        double r3680715 = b;
        double r3680716 = -9.332433396832084e-58;
        bool r3680717 = r3680715 <= r3680716;
        double r3680718 = -1.0;
        double r3680719 = c;
        double r3680720 = r3680719 / r3680715;
        double r3680721 = r3680718 * r3680720;
        double r3680722 = 3.038903409991338e+107;
        bool r3680723 = r3680715 <= r3680722;
        double r3680724 = 2.0;
        double r3680725 = a;
        double r3680726 = r3680724 * r3680725;
        double r3680727 = r3680715 / r3680726;
        double r3680728 = -r3680727;
        double r3680729 = r3680715 * r3680715;
        double r3680730 = 4.0;
        double r3680731 = r3680725 * r3680719;
        double r3680732 = r3680730 * r3680731;
        double r3680733 = r3680729 - r3680732;
        double r3680734 = sqrt(r3680733);
        double r3680735 = r3680734 / r3680726;
        double r3680736 = r3680728 - r3680735;
        double r3680737 = r3680715 / r3680725;
        double r3680738 = r3680720 - r3680737;
        double r3680739 = 1.0;
        double r3680740 = r3680738 * r3680739;
        double r3680741 = r3680723 ? r3680736 : r3680740;
        double r3680742 = r3680717 ? r3680721 : r3680741;
        return r3680742;
}

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.1
Target21.4
Herbie10.5
\[\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 < -9.332433396832084e-58

    1. Initial program 53.5

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

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

    if -9.332433396832084e-58 < b < 3.038903409991338e+107

    1. Initial program 14.1

      \[\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-sub14.1

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

    if 3.038903409991338e+107 < b

    1. Initial program 49.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.5

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

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

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

Reproduce

herbie shell --seed 2019171 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"

  :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)))