Average Error: 1.6 → 1.6
Time: 3.8m
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)}\]
\[\left(\frac{\left(\left(\sqrt{\left(\left(\mathsf{qms}\left(\left(\left(b \cdot b\right)\right), \left(a \cdot 4\right), c\right)\right)\right)}\right) - b\right)}{2}\right) \cdot \left(\frac{\left(1\right)}{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)}
\left(\frac{\left(\left(\sqrt{\left(\left(\mathsf{qms}\left(\left(\left(b \cdot b\right)\right), \left(a \cdot 4\right), c\right)\right)\right)}\right) - b\right)}{2}\right) \cdot \left(\frac{\left(1\right)}{a}\right)
double f(double a, double b, double c) {
        double r1052078 = b;
        double r1052079 = -r1052078;
        double r1052080 = r1052078 * r1052078;
        double r1052081 = /* ERROR: no support for value #<cpointer:posit16> in C */;
        double r1052082 = a;
        double r1052083 = c;
        double r1052084 = r1052082 * r1052083;
        double r1052085 = r1052081 * r1052084;
        double r1052086 = r1052080 - r1052085;
        double r1052087 = sqrt(r1052086);
        double r1052088 = r1052079 + r1052087;
        double r1052089 = /* ERROR: no support for value #<cpointer:posit16> in C */;
        double r1052090 = r1052089 * r1052082;
        double r1052091 = r1052088 / r1052090;
        return r1052091;
}

double f(double a, double b, double c) {
        double r1052092 = b;
        double r1052093 = r1052092 * r1052092;
        double r1052094 = /*Error: no posit support in C */;
        double r1052095 = a;
        double r1052096 = /* ERROR: no support for value #<cpointer:posit16> in C */;
        double r1052097 = r1052095 * r1052096;
        double r1052098 = c;
        double r1052099 = /*Error: no posit support in C */;
        double r1052100 = /*Error: no posit support in C */;
        double r1052101 = sqrt(r1052100);
        double r1052102 = r1052101 - r1052092;
        double r1052103 = /* ERROR: no support for value #<cpointer:posit16> in C */;
        double r1052104 = r1052102 / r1052103;
        double r1052105 = 1.0;
        double r1052106 = /* ERROR: no posit support in C */;
        double r1052107 = r1052106 / r1052095;
        double r1052108 = r1052104 * r1052107;
        return r1052108;
}

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. Simplified1.6

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

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

    \[\leadsto \frac{\left(\left(\sqrt{\color{blue}{\left(\left(\mathsf{qms}\left(\left(\left(b \cdot b\right)\right), \left(a \cdot 4\right), c\right)\right)\right)}}\right) - b\right)}{\left(2 \cdot a\right)}\]
  6. Using strategy rm
  7. Applied *p16-rgt-identity-expand1.6

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

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

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

Reproduce

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