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{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{b}{a}\\

\end{array}
double f(double a, double b, double c) {
        double r17923813 = b;
        double r17923814 = -r17923813;
        double r17923815 = r17923813 * r17923813;
        double r17923816 = 4.0;
        double r17923817 = a;
        double r17923818 = c;
        double r17923819 = r17923817 * r17923818;
        double r17923820 = r17923816 * r17923819;
        double r17923821 = r17923815 - r17923820;
        double r17923822 = sqrt(r17923821);
        double r17923823 = r17923814 - r17923822;
        double r17923824 = 2.0;
        double r17923825 = r17923824 * r17923817;
        double r17923826 = r17923823 / r17923825;
        return r17923826;
}

double f(double a, double b, double c) {
        double r17923827 = b;
        double r17923828 = -1.1214768270116103e+154;
        bool r17923829 = r17923827 <= r17923828;
        double r17923830 = c;
        double r17923831 = r17923830 / r17923827;
        double r17923832 = -r17923831;
        double r17923833 = 1.199441090208904e-250;
        bool r17923834 = r17923827 <= r17923833;
        double r17923835 = a;
        double r17923836 = r17923830 * r17923835;
        double r17923837 = -4.0;
        double r17923838 = r17923827 * r17923827;
        double r17923839 = fma(r17923836, r17923837, r17923838);
        double r17923840 = sqrt(r17923839);
        double r17923841 = r17923840 - r17923827;
        double r17923842 = 2.0;
        double r17923843 = r17923841 / r17923842;
        double r17923844 = r17923830 / r17923843;
        double r17923845 = 3.3389954009657566e+124;
        bool r17923846 = r17923827 <= r17923845;
        double r17923847 = -r17923827;
        double r17923848 = fma(r17923837, r17923836, r17923838);
        double r17923849 = sqrt(r17923848);
        double r17923850 = r17923847 - r17923849;
        double r17923851 = r17923835 * r17923842;
        double r17923852 = r17923850 / r17923851;
        double r17923853 = r17923827 / r17923835;
        double r17923854 = -r17923853;
        double r17923855 = r17923846 ? r17923852 : r17923854;
        double r17923856 = r17923834 ? r17923844 : r17923855;
        double r17923857 = r17923829 ? r17923832 : r17923856;
        return r17923857;
}

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{\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}}{\color{blue}{1 \cdot 2}}}{1 \cdot a}\]
    10. Applied *-un-lft-identity16.2

      \[\leadsto \frac{\frac{\color{blue}{1 \cdot \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}}}{1 \cdot 2}}{1 \cdot a}\]
    11. Applied times-frac16.2

      \[\leadsto \frac{\color{blue}{\frac{1}{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}\]
    12. Applied times-frac16.2

      \[\leadsto \color{blue}{\frac{\frac{1}{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}}\]
    13. 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}\]
    14. 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. Using strategy rm
    4. Applied flip--61.9

      \[\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. Simplified62.0

      \[\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. Simplified62.0

      \[\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. Taylor expanded around 0 3.5

      \[\leadsto \color{blue}{-1 \cdot \frac{b}{a}}\]
    8. Simplified3.5

      \[\leadsto \color{blue}{-\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{b}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2019128 +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)))