Average Error: 43.9 → 0.2
Time: 29.1s
Precision: 64
\[1.1102230246251565404236316680908203125 \cdot 10^{-16} \lt a \lt 9007199254740992 \land 1.1102230246251565404236316680908203125 \cdot 10^{-16} \lt b \lt 9007199254740992 \land 1.1102230246251565404236316680908203125 \cdot 10^{-16} \lt c \lt 9007199254740992\]
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\frac{1}{2} \cdot \frac{\frac{\left(a \cdot 4\right) \cdot c}{a}}{-\left(\sqrt{\mathsf{fma}\left(-c, a \cdot 4, b \cdot b\right)} + b\right)}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}
\frac{1}{2} \cdot \frac{\frac{\left(a \cdot 4\right) \cdot c}{a}}{-\left(\sqrt{\mathsf{fma}\left(-c, a \cdot 4, b \cdot b\right)} + b\right)}
double f(double a, double b, double c) {
        double r65385 = b;
        double r65386 = -r65385;
        double r65387 = r65385 * r65385;
        double r65388 = 4.0;
        double r65389 = a;
        double r65390 = r65388 * r65389;
        double r65391 = c;
        double r65392 = r65390 * r65391;
        double r65393 = r65387 - r65392;
        double r65394 = sqrt(r65393);
        double r65395 = r65386 + r65394;
        double r65396 = 2.0;
        double r65397 = r65396 * r65389;
        double r65398 = r65395 / r65397;
        return r65398;
}

double f(double a, double b, double c) {
        double r65399 = 1.0;
        double r65400 = 2.0;
        double r65401 = r65399 / r65400;
        double r65402 = a;
        double r65403 = 4.0;
        double r65404 = r65402 * r65403;
        double r65405 = c;
        double r65406 = r65404 * r65405;
        double r65407 = r65406 / r65402;
        double r65408 = -r65405;
        double r65409 = b;
        double r65410 = r65409 * r65409;
        double r65411 = fma(r65408, r65404, r65410);
        double r65412 = sqrt(r65411);
        double r65413 = r65412 + r65409;
        double r65414 = -r65413;
        double r65415 = r65407 / r65414;
        double r65416 = r65401 * r65415;
        return r65416;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Initial program 43.9

    \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
  2. Using strategy rm
  3. Applied flip-+43.9

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

    \[\leadsto \frac{\frac{\color{blue}{0 + \left(c \cdot a\right) \cdot 4}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\]
  5. Simplified0.4

    \[\leadsto \frac{\frac{0 + \left(c \cdot a\right) \cdot 4}{\color{blue}{\left(-b\right) - \sqrt{\mathsf{fma}\left(c, 4 \cdot \left(-a\right), {b}^{2}\right)}}}}{2 \cdot a}\]
  6. Using strategy rm
  7. Applied clear-num0.5

    \[\leadsto \color{blue}{\frac{1}{\frac{2 \cdot a}{\frac{0 + \left(c \cdot a\right) \cdot 4}{\left(-b\right) - \sqrt{\mathsf{fma}\left(c, 4 \cdot \left(-a\right), {b}^{2}\right)}}}}}\]
  8. Simplified0.3

    \[\leadsto \frac{1}{\color{blue}{\frac{2}{\frac{\frac{\left(a \cdot 4\right) \cdot c}{a}}{-\left(b + \sqrt{\mathsf{fma}\left(-c, a \cdot 4, b \cdot b\right)}\right)}}}}\]
  9. Using strategy rm
  10. Applied associate-/r/0.2

    \[\leadsto \color{blue}{\frac{1}{2} \cdot \frac{\frac{\left(a \cdot 4\right) \cdot c}{a}}{-\left(b + \sqrt{\mathsf{fma}\left(-c, a \cdot 4, b \cdot b\right)}\right)}}\]
  11. Final simplification0.2

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

Reproduce

herbie shell --seed 2019196 +o rules:numerics
(FPCore (a b c)
  :name "Quadratic roots, medium range"
  :pre (and (< 1.1102230246251565e-16 a 9007199254740992.0) (< 1.1102230246251565e-16 b 9007199254740992.0) (< 1.1102230246251565e-16 c 9007199254740992.0))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))