Average Error: 33.6 → 9.5
Time: 3.6m
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.026475235538753 \cdot 10^{-68}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 2.850331809009435 \cdot 10^{+96}:\\ \;\;\;\;\frac{\frac{-1}{2} \cdot \left(\sqrt{(a \cdot \left(c \cdot -4\right) + \left(b \cdot b\right))_*} + b\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-b}{a}\\ \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.026475235538753 \cdot 10^{-68}:\\
\;\;\;\;-\frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r13490625 = b;
        double r13490626 = -r13490625;
        double r13490627 = r13490625 * r13490625;
        double r13490628 = 4.0;
        double r13490629 = a;
        double r13490630 = c;
        double r13490631 = r13490629 * r13490630;
        double r13490632 = r13490628 * r13490631;
        double r13490633 = r13490627 - r13490632;
        double r13490634 = sqrt(r13490633);
        double r13490635 = r13490626 - r13490634;
        double r13490636 = 2.0;
        double r13490637 = r13490636 * r13490629;
        double r13490638 = r13490635 / r13490637;
        return r13490638;
}

double f(double a, double b, double c) {
        double r13490639 = b;
        double r13490640 = -9.026475235538753e-68;
        bool r13490641 = r13490639 <= r13490640;
        double r13490642 = c;
        double r13490643 = r13490642 / r13490639;
        double r13490644 = -r13490643;
        double r13490645 = 2.850331809009435e+96;
        bool r13490646 = r13490639 <= r13490645;
        double r13490647 = -0.5;
        double r13490648 = a;
        double r13490649 = -4.0;
        double r13490650 = r13490642 * r13490649;
        double r13490651 = r13490639 * r13490639;
        double r13490652 = fma(r13490648, r13490650, r13490651);
        double r13490653 = sqrt(r13490652);
        double r13490654 = r13490653 + r13490639;
        double r13490655 = r13490647 * r13490654;
        double r13490656 = r13490655 / r13490648;
        double r13490657 = -r13490639;
        double r13490658 = r13490657 / r13490648;
        double r13490659 = r13490646 ? r13490656 : r13490658;
        double r13490660 = r13490641 ? r13490644 : r13490659;
        return r13490660;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.6
Target20.7
Herbie9.5
\[\begin{array}{l} \mathbf{if}\;b \lt 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.026475235538753e-68

    1. Initial program 53.5

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

      \[\leadsto \color{blue}{\frac{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}}\]
    3. Taylor expanded around -inf 53.5

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

      \[\leadsto \frac{\frac{\left(-b\right) - \sqrt{\color{blue}{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}}{2}}{a}\]
    5. Taylor expanded around -inf 8.3

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

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

    if -9.026475235538753e-68 < b < 2.850331809009435e+96

    1. Initial program 12.6

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

      \[\leadsto \color{blue}{\frac{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}}\]
    3. Using strategy rm
    4. Applied *-un-lft-identity12.6

      \[\leadsto \frac{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{\color{blue}{1 \cdot a}}\]
    5. Applied div-inv12.6

      \[\leadsto \frac{\color{blue}{\left(\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}\right) \cdot \frac{1}{2}}}{1 \cdot a}\]
    6. Applied times-frac12.7

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

      \[\leadsto \color{blue}{\left(-\left(b + \sqrt{(a \cdot \left(c \cdot -4\right) + \left(b \cdot b\right))_*}\right)\right)} \cdot \frac{\frac{1}{2}}{a}\]
    8. Simplified12.7

      \[\leadsto \left(-\left(b + \sqrt{(a \cdot \left(c \cdot -4\right) + \left(b \cdot b\right))_*}\right)\right) \cdot \color{blue}{\frac{\frac{1}{2}}{a}}\]
    9. Using strategy rm
    10. Applied associate-*r/12.6

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

    if 2.850331809009435e+96 < b

    1. Initial program 43.5

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

      \[\leadsto \color{blue}{\frac{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}}\]
    3. Taylor expanded around -inf 43.5

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

      \[\leadsto \frac{\frac{\left(-b\right) - \sqrt{\color{blue}{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}}{2}}{a}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity43.5

      \[\leadsto \frac{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{\color{blue}{1 \cdot 2}}}{a}\]
    7. Applied *-un-lft-identity43.5

      \[\leadsto \frac{\frac{\left(-b\right) - \color{blue}{1 \cdot \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}}{1 \cdot 2}}{a}\]
    8. Applied *-un-lft-identity43.5

      \[\leadsto \frac{\frac{\color{blue}{1 \cdot \left(-b\right)} - 1 \cdot \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{1 \cdot 2}}{a}\]
    9. Applied distribute-lft-out--43.5

      \[\leadsto \frac{\frac{\color{blue}{1 \cdot \left(\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}\right)}}{1 \cdot 2}}{a}\]
    10. Applied times-frac43.5

      \[\leadsto \frac{\color{blue}{\frac{1}{1} \cdot \frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}}{a}\]
    11. Applied associate-/l*43.6

      \[\leadsto \color{blue}{\frac{\frac{1}{1}}{\frac{a}{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}}}\]
    12. Simplified43.6

      \[\leadsto \frac{\color{blue}{1}}{\frac{a}{\frac{\left(-b\right) - \sqrt{(\left(a \cdot c\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}}\]
    13. Taylor expanded around 0 4.1

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

      \[\leadsto \color{blue}{-\frac{b}{a}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification9.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -9.026475235538753 \cdot 10^{-68}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 2.850331809009435 \cdot 10^{+96}:\\ \;\;\;\;\frac{\frac{-1}{2} \cdot \left(\sqrt{(a \cdot \left(c \cdot -4\right) + \left(b \cdot b\right))_*} + b\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-b}{a}\\ \end{array}\]

Reproduce

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

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