Average Error: 1.6 → 1.5
Time: 15.7s
Precision: 64
\[\frac{\left(\frac{\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{\frac{\sqrt{b \cdot b - c \cdot \left(a \cdot 4\right)} - b}{2}}{a}\]
\frac{\left(\frac{\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{\frac{\sqrt{b \cdot b - c \cdot \left(a \cdot 4\right)} - b}{2}}{a}
double f(double a, double b, double c) {
        double r649090 = b;
        double r649091 = -r649090;
        double r649092 = r649090 * r649090;
        double r649093 = 4.0;
        double r649094 = /* ERROR: no posit support in C */;
        double r649095 = a;
        double r649096 = c;
        double r649097 = r649095 * r649096;
        double r649098 = r649094 * r649097;
        double r649099 = r649092 - r649098;
        double r649100 = sqrt(r649099);
        double r649101 = r649091 + r649100;
        double r649102 = 2.0;
        double r649103 = /* ERROR: no posit support in C */;
        double r649104 = r649103 * r649095;
        double r649105 = r649101 / r649104;
        return r649105;
}

double f(double a, double b, double c) {
        double r649106 = b;
        double r649107 = r649106 * r649106;
        double r649108 = c;
        double r649109 = a;
        double r649110 = 4.0;
        double r649111 = r649109 * r649110;
        double r649112 = r649108 * r649111;
        double r649113 = r649107 - r649112;
        double r649114 = sqrt(r649113);
        double r649115 = r649114 - r649106;
        double r649116 = 2.0;
        double r649117 = r649115 / r649116;
        double r649118 = r649117 / r649109;
        return r649118;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Initial program 1.6

    \[\frac{\left(\frac{\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. Simplified1.6

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

    \[\leadsto \color{blue}{\frac{\left(\frac{\left(\left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(c \cdot a\right) \cdot \left(4\right)\right)\right)}\right) - b\right)}{\left(2\right)}\right)}{a}}\]
  5. Using strategy rm
  6. Applied associate-*l*1.5

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

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

Reproduce

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