Average Error: 52.4 → 0.4
Time: 8.9s
Precision: 64
\[4.93038 \cdot 10^{-32} \lt a \lt 2.02824 \cdot 10^{31} \land 4.93038 \cdot 10^{-32} \lt b \lt 2.02824 \cdot 10^{31} \land 4.93038 \cdot 10^{-32} \lt c \lt 2.02824 \cdot 10^{31}\]
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\frac{\frac{1}{\frac{\frac{-b}{4}}{a \cdot c} - \frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4}}{a \cdot c}}}{2 \cdot a}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}
\frac{\frac{1}{\frac{\frac{-b}{4}}{a \cdot c} - \frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4}}{a \cdot c}}}{2 \cdot a}
double f(double a, double b, double c) {
        double r48582 = b;
        double r48583 = -r48582;
        double r48584 = r48582 * r48582;
        double r48585 = 4.0;
        double r48586 = a;
        double r48587 = r48585 * r48586;
        double r48588 = c;
        double r48589 = r48587 * r48588;
        double r48590 = r48584 - r48589;
        double r48591 = sqrt(r48590);
        double r48592 = r48583 + r48591;
        double r48593 = 2.0;
        double r48594 = r48593 * r48586;
        double r48595 = r48592 / r48594;
        return r48595;
}

double f(double a, double b, double c) {
        double r48596 = 1.0;
        double r48597 = b;
        double r48598 = -r48597;
        double r48599 = 4.0;
        double r48600 = r48598 / r48599;
        double r48601 = a;
        double r48602 = c;
        double r48603 = r48601 * r48602;
        double r48604 = r48600 / r48603;
        double r48605 = r48597 * r48597;
        double r48606 = r48599 * r48601;
        double r48607 = r48606 * r48602;
        double r48608 = r48605 - r48607;
        double r48609 = sqrt(r48608);
        double r48610 = r48609 / r48599;
        double r48611 = r48610 / r48603;
        double r48612 = r48604 - r48611;
        double r48613 = r48596 / r48612;
        double r48614 = 2.0;
        double r48615 = r48614 * r48601;
        double r48616 = r48613 / r48615;
        return r48616;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 52.4

    \[\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-+52.4

    \[\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 + 4 \cdot \left(a \cdot c\right)}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\]
  5. Using strategy rm
  6. Applied clear-num0.4

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

    \[\leadsto \frac{\frac{1}{\color{blue}{\frac{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4}}{a \cdot c}}}}{2 \cdot a}\]
  8. Using strategy rm
  9. Applied div-sub0.4

    \[\leadsto \frac{\frac{1}{\frac{\color{blue}{\frac{-b}{4} - \frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4}}}{a \cdot c}}}{2 \cdot a}\]
  10. Applied div-sub0.4

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

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

Reproduce

herbie shell --seed 2020081 +o rules:numerics
(FPCore (a b c)
  :name "Quadratic roots, wide range"
  :precision binary64
  :pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))