Average Error: 33.8 → 16.3
Time: 25.9s
Precision: 64
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le 1.690589989251114327382025705232506133811 \cdot 10^{-305}:\\ \;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}}}{2}\\ \mathbf{elif}\;b \le 6.695434107567982389585546912636742560821 \cdot 10^{164}:\\ \;\;\;\;\frac{\left(\frac{4 \cdot c}{\sqrt{\mathsf{fma}\left(\sqrt[3]{b} \cdot \sqrt[3]{b}, \sqrt[3]{b}, \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}\right)}} \cdot \frac{a}{a}\right) \cdot \frac{-1}{\sqrt{\sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)} + b}}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot \left(-c\right), 4, 0\right)}{b + b}}{a}}{2}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le 1.690589989251114327382025705232506133811 \cdot 10^{-305}:\\
\;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}}}{2}\\

\mathbf{elif}\;b \le 6.695434107567982389585546912636742560821 \cdot 10^{164}:\\
\;\;\;\;\frac{\left(\frac{4 \cdot c}{\sqrt{\mathsf{fma}\left(\sqrt[3]{b} \cdot \sqrt[3]{b}, \sqrt[3]{b}, \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}\right)}} \cdot \frac{a}{a}\right) \cdot \frac{-1}{\sqrt{\sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)} + b}}}{2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot \left(-c\right), 4, 0\right)}{b + b}}{a}}{2}\\

\end{array}
double f(double a, double b, double c) {
        double r132054 = b;
        double r132055 = -r132054;
        double r132056 = r132054 * r132054;
        double r132057 = 4.0;
        double r132058 = a;
        double r132059 = r132057 * r132058;
        double r132060 = c;
        double r132061 = r132059 * r132060;
        double r132062 = r132056 - r132061;
        double r132063 = sqrt(r132062);
        double r132064 = r132055 + r132063;
        double r132065 = 2.0;
        double r132066 = r132065 * r132058;
        double r132067 = r132064 / r132066;
        return r132067;
}

double f(double a, double b, double c) {
        double r132068 = b;
        double r132069 = 1.6905899892511143e-305;
        bool r132070 = r132068 <= r132069;
        double r132071 = 1.0;
        double r132072 = a;
        double r132073 = -r132072;
        double r132074 = 4.0;
        double r132075 = r132073 * r132074;
        double r132076 = c;
        double r132077 = r132068 * r132068;
        double r132078 = fma(r132075, r132076, r132077);
        double r132079 = sqrt(r132078);
        double r132080 = r132079 - r132068;
        double r132081 = r132072 / r132080;
        double r132082 = r132071 / r132081;
        double r132083 = 2.0;
        double r132084 = r132082 / r132083;
        double r132085 = 6.695434107567982e+164;
        bool r132086 = r132068 <= r132085;
        double r132087 = r132074 * r132076;
        double r132088 = cbrt(r132068);
        double r132089 = r132088 * r132088;
        double r132090 = -r132076;
        double r132091 = r132072 * r132090;
        double r132092 = fma(r132074, r132091, r132077);
        double r132093 = sqrt(r132092);
        double r132094 = fma(r132089, r132088, r132093);
        double r132095 = sqrt(r132094);
        double r132096 = r132087 / r132095;
        double r132097 = r132072 / r132072;
        double r132098 = r132096 * r132097;
        double r132099 = -1.0;
        double r132100 = r132093 + r132068;
        double r132101 = sqrt(r132100);
        double r132102 = r132099 / r132101;
        double r132103 = r132098 * r132102;
        double r132104 = r132103 / r132083;
        double r132105 = 0.0;
        double r132106 = fma(r132091, r132074, r132105);
        double r132107 = r132068 + r132068;
        double r132108 = r132106 / r132107;
        double r132109 = r132108 / r132072;
        double r132110 = r132109 / r132083;
        double r132111 = r132086 ? r132104 : r132110;
        double r132112 = r132070 ? r132084 : r132111;
        return r132112;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.8
Target21.2
Herbie16.3
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if b < 1.6905899892511143e-305

    1. Initial program 22.0

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied clear-num22.1

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

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

    if 1.6905899892511143e-305 < b < 6.695434107567982e+164

    1. Initial program 35.2

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied flip--35.3

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

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

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\color{blue}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{a}}{2}\]
    7. Using strategy rm
    8. Applied *-un-lft-identity17.2

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}{\color{blue}{1 \cdot a}}}{2}\]
    9. Applied add-sqr-sqrt17.4

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\color{blue}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b} \cdot \sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}}{1 \cdot a}}{2}\]
    10. Applied *-un-lft-identity17.4

      \[\leadsto \frac{\frac{\frac{\color{blue}{1 \cdot \mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b} \cdot \sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{1 \cdot a}}{2}\]
    11. Applied times-frac17.4

      \[\leadsto \frac{\frac{\color{blue}{\frac{1}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}} \cdot \frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}}{1 \cdot a}}{2}\]
    12. Applied times-frac16.6

      \[\leadsto \frac{\color{blue}{\frac{\frac{1}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{1} \cdot \frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{a}}}{2}\]
    13. Simplified16.6

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

      \[\leadsto \frac{\frac{1}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}} \cdot \color{blue}{\left(\frac{-a}{a} \cdot \frac{4 \cdot c}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}\right)}}{2}\]
    15. Using strategy rm
    16. Applied add-cube-cbrt10.1

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

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

    if 6.695434107567982e+164 < b

    1. Initial program 64.0

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied flip--64.0

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

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

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

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\color{blue}{b} + b}}{a}}{2}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification16.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le 1.690589989251114327382025705232506133811 \cdot 10^{-305}:\\ \;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}}}{2}\\ \mathbf{elif}\;b \le 6.695434107567982389585546912636742560821 \cdot 10^{164}:\\ \;\;\;\;\frac{\left(\frac{4 \cdot c}{\sqrt{\mathsf{fma}\left(\sqrt[3]{b} \cdot \sqrt[3]{b}, \sqrt[3]{b}, \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}\right)}} \cdot \frac{a}{a}\right) \cdot \frac{-1}{\sqrt{\sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)} + b}}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot \left(-c\right), 4, 0\right)}{b + b}}{a}}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019195 +o rules:numerics
(FPCore (a b c)
  :name "The quadratic formula (r1)"

  :herbie-target
  (if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))

  (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))