Average Error: 33.0 → 10.6
Time: 24.2s
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 -3.794505329565205 \cdot 10^{+146}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 1.6194276288860963:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot \left(-4 \cdot c\right)\right)\right)} - b}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \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 -3.794505329565205 \cdot 10^{+146}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\

\mathbf{elif}\;b \le 1.6194276288860963:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot \left(-4 \cdot c\right)\right)\right)} - b}{2}}{a}\\

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

\end{array}
double f(double a, double b, double c) {
        double r1885689 = b;
        double r1885690 = -r1885689;
        double r1885691 = r1885689 * r1885689;
        double r1885692 = 4.0;
        double r1885693 = a;
        double r1885694 = c;
        double r1885695 = r1885693 * r1885694;
        double r1885696 = r1885692 * r1885695;
        double r1885697 = r1885691 - r1885696;
        double r1885698 = sqrt(r1885697);
        double r1885699 = r1885690 + r1885698;
        double r1885700 = 2.0;
        double r1885701 = r1885700 * r1885693;
        double r1885702 = r1885699 / r1885701;
        return r1885702;
}

double f(double a, double b, double c) {
        double r1885703 = b;
        double r1885704 = -3.794505329565205e+146;
        bool r1885705 = r1885703 <= r1885704;
        double r1885706 = c;
        double r1885707 = r1885706 / r1885703;
        double r1885708 = a;
        double r1885709 = r1885703 / r1885708;
        double r1885710 = r1885707 - r1885709;
        double r1885711 = 1.6194276288860963;
        bool r1885712 = r1885703 <= r1885711;
        double r1885713 = -4.0;
        double r1885714 = r1885713 * r1885706;
        double r1885715 = r1885708 * r1885714;
        double r1885716 = fma(r1885703, r1885703, r1885715);
        double r1885717 = sqrt(r1885716);
        double r1885718 = r1885717 - r1885703;
        double r1885719 = 2.0;
        double r1885720 = r1885718 / r1885719;
        double r1885721 = r1885720 / r1885708;
        double r1885722 = -r1885707;
        double r1885723 = r1885712 ? r1885721 : r1885722;
        double r1885724 = r1885705 ? r1885710 : r1885723;
        return r1885724;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.0
Target20.2
Herbie10.6
\[\begin{array}{l} \mathbf{if}\;b \lt 0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \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 < -3.794505329565205e+146

    1. Initial program 58.0

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified58.0

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot c\right) \cdot -4\right)\right)} - b}{2}}{a}}\]
    3. Taylor expanded around -inf 3.1

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

    if -3.794505329565205e+146 < b < 1.6194276288860963

    1. Initial program 15.0

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified15.0

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot c\right) \cdot -4\right)\right)} - b}{2}}{a}}\]
    3. Taylor expanded around -inf 15.0

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

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

    if 1.6194276288860963 < b

    1. Initial program 54.4

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified54.4

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot c\right) \cdot -4\right)\right)} - b}{2}}{a}}\]
    3. Taylor expanded around -inf 54.4

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

      \[\leadsto \frac{\frac{\sqrt{\color{blue}{\mathsf{fma}\left(b, b, \left(a \cdot \left(-4 \cdot c\right)\right)\right)}} - b}{2}}{a}\]
    5. Taylor expanded around inf 5.9

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
    6. Simplified5.9

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3.794505329565205 \cdot 10^{+146}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 1.6194276288860963:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot \left(-4 \cdot c\right)\right)\right)} - b}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019129 +o rules:numerics
(FPCore (a b c)
  :name "quadp (p42, positive)"

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