Average Error: 1.6 → 1.5
Time: 31.9s
Precision: 64
\[\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)\right)}{\left(\left(2\right) \cdot a\right)}\]
\[\frac{\left(-b\right) - \sqrt{\left(\mathsf{qms}\left(\left(\left(b \cdot b\right)\right), \left(4 \cdot a\right), c\right)\right)}}{2 \cdot a}\]
\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)\right)}{\left(\left(2\right) \cdot a\right)}
\frac{\left(-b\right) - \sqrt{\left(\mathsf{qms}\left(\left(\left(b \cdot b\right)\right), \left(4 \cdot a\right), c\right)\right)}}{2 \cdot a}
double f(double a, double b, double c) {
        double r1168954 = b;
        double r1168955 = -r1168954;
        double r1168956 = r1168954 * r1168954;
        double r1168957 = 4.0;
        double r1168958 = /* ERROR: no posit support in C */;
        double r1168959 = a;
        double r1168960 = c;
        double r1168961 = r1168959 * r1168960;
        double r1168962 = r1168958 * r1168961;
        double r1168963 = r1168956 - r1168962;
        double r1168964 = sqrt(r1168963);
        double r1168965 = r1168955 - r1168964;
        double r1168966 = 2.0;
        double r1168967 = /* ERROR: no posit support in C */;
        double r1168968 = r1168967 * r1168959;
        double r1168969 = r1168965 / r1168968;
        return r1168969;
}

double f(double a, double b, double c) {
        double r1168970 = b;
        double r1168971 = -r1168970;
        double r1168972 = r1168970 * r1168970;
        double r1168973 = /*Error: no posit support in C */;
        double r1168974 = 4.0;
        double r1168975 = a;
        double r1168976 = r1168974 * r1168975;
        double r1168977 = c;
        double r1168978 = /*Error: no posit support in C */;
        double r1168979 = /*Error: no posit support in C */;
        double r1168980 = sqrt(r1168979);
        double r1168981 = r1168971 - r1168980;
        double r1168982 = 2.0;
        double r1168983 = r1168982 * r1168975;
        double r1168984 = r1168981 / r1168983;
        return r1168984;
}

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(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)\right)}{\left(\left(2\right) \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(\left(4\right) \cdot a\right) \cdot c\right)}\right)}\right)\right)}{\left(\left(2\right) \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(\left(4\right) \cdot a\right) \cdot c\right)\right)}\right)\right)}{\left(\left(2\right) \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(\left(4\right) \cdot a\right), c\right)\right)\right)}}\right)\right)}{\left(\left(2\right) \cdot a\right)}\]
  7. Final simplification1.5

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

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"
  (/.p16 (-.p16 (neg.p16 b) (sqrt.p16 (-.p16 (*.p16 b b) (*.p16 (real->posit16 4) (*.p16 a c))))) (*.p16 (real->posit16 2) a)))