Average Error: 33.8 → 10.2
Time: 4.5s
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 -1.369694371126339229257094016308893237032 \cdot 10^{-83}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.678238127073728805877873599258558355989 \cdot 10^{53}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}, \sqrt[3]{-b}, -\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}{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 -1.369694371126339229257094016308893237032 \cdot 10^{-83}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le 2.678238127073728805877873599258558355989 \cdot 10^{53}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}, \sqrt[3]{-b}, -\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}{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 r85115 = b;
        double r85116 = -r85115;
        double r85117 = r85115 * r85115;
        double r85118 = 4.0;
        double r85119 = a;
        double r85120 = c;
        double r85121 = r85119 * r85120;
        double r85122 = r85118 * r85121;
        double r85123 = r85117 - r85122;
        double r85124 = sqrt(r85123);
        double r85125 = r85116 - r85124;
        double r85126 = 2.0;
        double r85127 = r85126 * r85119;
        double r85128 = r85125 / r85127;
        return r85128;
}

double f(double a, double b, double c) {
        double r85129 = b;
        double r85130 = -1.3696943711263392e-83;
        bool r85131 = r85129 <= r85130;
        double r85132 = -1.0;
        double r85133 = c;
        double r85134 = r85133 / r85129;
        double r85135 = r85132 * r85134;
        double r85136 = 2.678238127073729e+53;
        bool r85137 = r85129 <= r85136;
        double r85138 = -r85129;
        double r85139 = cbrt(r85138);
        double r85140 = r85139 * r85139;
        double r85141 = r85129 * r85129;
        double r85142 = 4.0;
        double r85143 = a;
        double r85144 = r85143 * r85133;
        double r85145 = r85142 * r85144;
        double r85146 = r85141 - r85145;
        double r85147 = sqrt(r85146);
        double r85148 = -r85147;
        double r85149 = fma(r85140, r85139, r85148);
        double r85150 = 2.0;
        double r85151 = r85150 * r85143;
        double r85152 = r85149 / r85151;
        double r85153 = 1.0;
        double r85154 = r85129 / r85143;
        double r85155 = r85134 - r85154;
        double r85156 = r85153 * r85155;
        double r85157 = r85137 ? r85152 : r85156;
        double r85158 = r85131 ? r85135 : r85157;
        return r85158;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.8
Target20.8
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 < -1.3696943711263392e-83

    1. Initial program 53.2

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

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

    if -1.3696943711263392e-83 < b < 2.678238127073729e+53

    1. Initial program 12.8

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt13.0

      \[\leadsto \frac{\color{blue}{\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}\right) \cdot \sqrt[3]{-b}} - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    4. Applied fma-neg13.0

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

    if 2.678238127073729e+53 < b

    1. Initial program 38.1

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

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

      \[\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 -1.369694371126339229257094016308893237032 \cdot 10^{-83}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.678238127073728805877873599258558355989 \cdot 10^{53}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}, \sqrt[3]{-b}, -\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019362 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"
  :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)))