Average Error: 1.6 → 1.5
Time: 23.3s
Precision: 64
\[\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \left(4 \cdot \left(a \cdot c\right)\right)\right)}\right)\right)}{\left(2 \cdot a\right)}\]
\[\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(\mathsf{qms}\left(\left(\left(b \cdot b\right)\right), \left(4 \cdot a\right), c\right)\right)\right)}\right)\right)}{\left(2 \cdot a\right)}\]
\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \left(4 \cdot \left(a \cdot c\right)\right)\right)}\right)\right)}{\left(2 \cdot a\right)}
\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(\mathsf{qms}\left(\left(\left(b \cdot b\right)\right), \left(4 \cdot a\right), c\right)\right)\right)}\right)\right)}{\left(2 \cdot a\right)}
double f(double a, double b, double c) {
        double r2051868 = b;
        double r2051869 = -r2051868;
        double r2051870 = r2051868 * r2051868;
        double r2051871 = /* ERROR: no support for value #<cpointer:posit16> in C */;
        double r2051872 = a;
        double r2051873 = c;
        double r2051874 = r2051872 * r2051873;
        double r2051875 = r2051871 * r2051874;
        double r2051876 = r2051870 - r2051875;
        double r2051877 = sqrt(r2051876);
        double r2051878 = r2051869 - r2051877;
        double r2051879 = /* ERROR: no support for value #<cpointer:posit16> in C */;
        double r2051880 = r2051879 * r2051872;
        double r2051881 = r2051878 / r2051880;
        return r2051881;
}

double f(double a, double b, double c) {
        double r2051882 = b;
        double r2051883 = -r2051882;
        double r2051884 = r2051882 * r2051882;
        double r2051885 = /*Error: no posit support in C */;
        double r2051886 = /* ERROR: no support for value #<cpointer:posit16> in C */;
        double r2051887 = a;
        double r2051888 = r2051886 * r2051887;
        double r2051889 = c;
        double r2051890 = /*Error: no posit support in C */;
        double r2051891 = /*Error: no posit support in C */;
        double r2051892 = sqrt(r2051891);
        double r2051893 = r2051883 - r2051892;
        double r2051894 = /* ERROR: no support for value #<cpointer:posit16> in C */;
        double r2051895 = r2051894 * r2051887;
        double r2051896 = r2051893 / r2051895;
        return r2051896;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Initial program 1.6

    \[\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \left(4 \cdot \left(a \cdot c\right)\right)\right)}\right)\right)}{\left(2 \cdot a\right)}\]
  2. Using strategy rm
  3. Applied associate-*r*1.5

    \[\leadsto \frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \color{blue}{\left(\left(4 \cdot a\right) \cdot c\right)}\right)}\right)\right)}{\left(2 \cdot a\right)}\]
  4. Using strategy rm
  5. Applied introduce-quire1.5

    \[\leadsto \frac{\left(\left(-b\right) - \left(\sqrt{\left(\color{blue}{\left(\left(\left(b \cdot b\right)\right)\right)} - \left(\left(4 \cdot a\right) \cdot c\right)\right)}\right)\right)}{\left(2 \cdot a\right)}\]
  6. Applied insert-quire-fdp-sub1.5

    \[\leadsto \frac{\left(\left(-b\right) - \left(\sqrt{\color{blue}{\left(\left(\mathsf{qms}\left(\left(\left(b \cdot b\right)\right), \left(4 \cdot a\right), c\right)\right)\right)}}\right)\right)}{\left(2 \cdot a\right)}\]
  7. Final simplification1.5

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

Reproduce

herbie shell --seed 0 
(FPCore (a b c)
  :name "quadm (p42, negative)"
  (/.p16 (-.p16 (neg.p16 b) (sqrt.p16 (-.p16 (*.p16 b b) (*.p16 #<cpointer:posit16> (*.p16 a c))))) (*.p16 #<cpointer:posit16> a)))