Average Error: 33.8 → 16.3
Time: 30.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 r110994 = b;
        double r110995 = -r110994;
        double r110996 = r110994 * r110994;
        double r110997 = 4.0;
        double r110998 = a;
        double r110999 = r110997 * r110998;
        double r111000 = c;
        double r111001 = r110999 * r111000;
        double r111002 = r110996 - r111001;
        double r111003 = sqrt(r111002);
        double r111004 = r110995 + r111003;
        double r111005 = 2.0;
        double r111006 = r111005 * r110998;
        double r111007 = r111004 / r111006;
        return r111007;
}

double f(double a, double b, double c) {
        double r111008 = b;
        double r111009 = 1.6905899892511143e-305;
        bool r111010 = r111008 <= r111009;
        double r111011 = 1.0;
        double r111012 = a;
        double r111013 = -r111012;
        double r111014 = 4.0;
        double r111015 = r111013 * r111014;
        double r111016 = c;
        double r111017 = r111008 * r111008;
        double r111018 = fma(r111015, r111016, r111017);
        double r111019 = sqrt(r111018);
        double r111020 = r111019 - r111008;
        double r111021 = r111012 / r111020;
        double r111022 = r111011 / r111021;
        double r111023 = 2.0;
        double r111024 = r111022 / r111023;
        double r111025 = 6.695434107567982e+164;
        bool r111026 = r111008 <= r111025;
        double r111027 = r111014 * r111016;
        double r111028 = cbrt(r111008);
        double r111029 = r111028 * r111028;
        double r111030 = -r111016;
        double r111031 = r111012 * r111030;
        double r111032 = fma(r111014, r111031, r111017);
        double r111033 = sqrt(r111032);
        double r111034 = fma(r111029, r111028, r111033);
        double r111035 = sqrt(r111034);
        double r111036 = r111027 / r111035;
        double r111037 = r111012 / r111012;
        double r111038 = r111036 * r111037;
        double r111039 = -1.0;
        double r111040 = r111033 + r111008;
        double r111041 = sqrt(r111040);
        double r111042 = r111039 / r111041;
        double r111043 = r111038 * r111042;
        double r111044 = r111043 / r111023;
        double r111045 = 0.0;
        double r111046 = fma(r111031, r111014, r111045);
        double r111047 = r111008 + r111008;
        double r111048 = r111046 / r111047;
        double r111049 = r111048 / r111012;
        double r111050 = r111049 / r111023;
        double r111051 = r111026 ? r111044 : r111050;
        double r111052 = r111010 ? r111024 : r111051;
        return r111052;
}

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