Average Error: 32.8 → 6.4
Time: 3.1m
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.1214768270116103 \cdot 10^{+154}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 1.199441090208904 \cdot 10^{-250}:\\ \;\;\;\;\frac{c}{\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)} - b}{2}}\\ \mathbf{elif}\;b \le 3.3389954009657566 \cdot 10^{+124}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(-4, \left(c \cdot a\right), \left(b \cdot b\right)\right)}}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} - \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 -1.1214768270116103 \cdot 10^{+154}:\\
\;\;\;\;-\frac{c}{b}\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r37794960 = b;
        double r37794961 = -r37794960;
        double r37794962 = r37794960 * r37794960;
        double r37794963 = 4.0;
        double r37794964 = a;
        double r37794965 = c;
        double r37794966 = r37794964 * r37794965;
        double r37794967 = r37794963 * r37794966;
        double r37794968 = r37794962 - r37794967;
        double r37794969 = sqrt(r37794968);
        double r37794970 = r37794961 - r37794969;
        double r37794971 = 2.0;
        double r37794972 = r37794971 * r37794964;
        double r37794973 = r37794970 / r37794972;
        return r37794973;
}

double f(double a, double b, double c) {
        double r37794974 = b;
        double r37794975 = -1.1214768270116103e+154;
        bool r37794976 = r37794974 <= r37794975;
        double r37794977 = c;
        double r37794978 = r37794977 / r37794974;
        double r37794979 = -r37794978;
        double r37794980 = 1.199441090208904e-250;
        bool r37794981 = r37794974 <= r37794980;
        double r37794982 = a;
        double r37794983 = r37794977 * r37794982;
        double r37794984 = -4.0;
        double r37794985 = r37794974 * r37794974;
        double r37794986 = fma(r37794983, r37794984, r37794985);
        double r37794987 = sqrt(r37794986);
        double r37794988 = r37794987 - r37794974;
        double r37794989 = 2.0;
        double r37794990 = r37794988 / r37794989;
        double r37794991 = r37794977 / r37794990;
        double r37794992 = 3.3389954009657566e+124;
        bool r37794993 = r37794974 <= r37794992;
        double r37794994 = -r37794974;
        double r37794995 = fma(r37794984, r37794983, r37794985);
        double r37794996 = sqrt(r37794995);
        double r37794997 = r37794994 - r37794996;
        double r37794998 = r37794982 * r37794989;
        double r37794999 = r37794997 / r37794998;
        double r37795000 = r37794974 / r37794982;
        double r37795001 = r37794978 - r37795000;
        double r37795002 = r37794993 ? r37794999 : r37795001;
        double r37795003 = r37794981 ? r37794991 : r37795002;
        double r37795004 = r37794976 ? r37794979 : r37795003;
        return r37795004;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original32.8
Target20.1
Herbie6.4
\[\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 4 regimes
  2. if b < -1.1214768270116103e+154

    1. Initial program 62.9

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

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

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
    4. Simplified1.5

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

    if -1.1214768270116103e+154 < b < 1.199441090208904e-250

    1. Initial program 32.2

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

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

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

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

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

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

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

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

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

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

    if 1.199441090208904e-250 < b < 3.3389954009657566e+124

    1. Initial program 7.8

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

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

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

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

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

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

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

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

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

    if 3.3389954009657566e+124 < b

    1. Initial program 50.5

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

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

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

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

Reproduce

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

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