Average Error: 34.0 → 10.6
Time: 18.9s
Precision: 64
\[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -1.76351621427461392823177571966952670558 \cdot 10^{80}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -4.275041523480463755960237531055658758378 \cdot 10^{-132}:\\ \;\;\;\;\frac{4 \cdot \left(a \cdot c\right)}{2} \cdot \frac{\frac{1}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - b}}{a}\\ \mathbf{elif}\;b \le 2098867031.934578418731689453125:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]
\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -1.76351621427461392823177571966952670558 \cdot 10^{80}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le -4.275041523480463755960237531055658758378 \cdot 10^{-132}:\\
\;\;\;\;\frac{4 \cdot \left(a \cdot c\right)}{2} \cdot \frac{\frac{1}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - b}}{a}\\

\mathbf{elif}\;b \le 2098867031.934578418731689453125:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\

\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

\end{array}
double f(double a, double b, double c) {
        double r73223 = b;
        double r73224 = -r73223;
        double r73225 = r73223 * r73223;
        double r73226 = 4.0;
        double r73227 = a;
        double r73228 = c;
        double r73229 = r73227 * r73228;
        double r73230 = r73226 * r73229;
        double r73231 = r73225 - r73230;
        double r73232 = sqrt(r73231);
        double r73233 = r73224 - r73232;
        double r73234 = 2.0;
        double r73235 = r73234 * r73227;
        double r73236 = r73233 / r73235;
        return r73236;
}

double f(double a, double b, double c) {
        double r73237 = b;
        double r73238 = -1.763516214274614e+80;
        bool r73239 = r73237 <= r73238;
        double r73240 = -1.0;
        double r73241 = c;
        double r73242 = r73241 / r73237;
        double r73243 = r73240 * r73242;
        double r73244 = -4.275041523480464e-132;
        bool r73245 = r73237 <= r73244;
        double r73246 = 4.0;
        double r73247 = a;
        double r73248 = r73247 * r73241;
        double r73249 = r73246 * r73248;
        double r73250 = 2.0;
        double r73251 = r73249 / r73250;
        double r73252 = 1.0;
        double r73253 = r73237 * r73237;
        double r73254 = r73248 * r73246;
        double r73255 = r73253 - r73254;
        double r73256 = sqrt(r73255);
        double r73257 = r73256 - r73237;
        double r73258 = r73252 / r73257;
        double r73259 = r73258 / r73247;
        double r73260 = r73251 * r73259;
        double r73261 = 2098867031.9345784;
        bool r73262 = r73237 <= r73261;
        double r73263 = -r73237;
        double r73264 = r73253 - r73249;
        double r73265 = sqrt(r73264);
        double r73266 = r73263 - r73265;
        double r73267 = r73250 * r73247;
        double r73268 = r73266 / r73267;
        double r73269 = 1.0;
        double r73270 = r73237 / r73247;
        double r73271 = r73242 - r73270;
        double r73272 = r73269 * r73271;
        double r73273 = r73262 ? r73268 : r73272;
        double r73274 = r73245 ? r73260 : r73273;
        double r73275 = r73239 ? r73243 : r73274;
        return r73275;
}

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

Target

Original34.0
Target20.9
Herbie10.6
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \end{array}\]

Derivation

  1. Split input into 4 regimes
  2. if b < -1.763516214274614e+80

    1. Initial program 58.0

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Taylor expanded around -inf 2.8

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]

    if -1.763516214274614e+80 < b < -4.275041523480464e-132

    1. Initial program 39.7

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

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

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

      \[\leadsto \frac{\frac{0 + \left(a \cdot c\right) \cdot 4}{\color{blue}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}}{2 \cdot a}\]
    6. Taylor expanded around 0 15.4

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

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

      \[\leadsto \frac{\color{blue}{\left(0 + \left(a \cdot c\right) \cdot 4\right) \cdot \frac{1}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - b}}}{2 \cdot a}\]
    10. Applied times-frac18.9

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

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

    if -4.275041523480464e-132 < b < 2098867031.9345784

    1. Initial program 14.4

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

    if 2098867031.9345784 < b

    1. Initial program 32.3

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Taylor expanded around inf 7.0

      \[\leadsto \color{blue}{1 \cdot \frac{c}{b} - 1 \cdot \frac{b}{a}}\]
    3. Simplified7.0

      \[\leadsto \color{blue}{1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification10.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.76351621427461392823177571966952670558 \cdot 10^{80}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -4.275041523480463755960237531055658758378 \cdot 10^{-132}:\\ \;\;\;\;\frac{4 \cdot \left(a \cdot c\right)}{2} \cdot \frac{\frac{1}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - b}}{a}\\ \mathbf{elif}\;b \le 2098867031.934578418731689453125:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019209 
(FPCore (a b c)
  :name "The quadratic formula (r2)"
  :precision binary64

  :herbie-target
  (if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))

  (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))