Average Error: 34.6 → 10.3
Time: 13.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 -3995085856351435358208:\\ \;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\ \mathbf{elif}\;b \le 1.369663197338588139608765037558519461426 \cdot 10^{-61}:\\ \;\;\;\;\left(\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} + \left(-b\right)\right) \cdot \frac{\frac{1}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot -1\\ \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 -3995085856351435358208:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\

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

\mathbf{else}:\\
\;\;\;\;\frac{c}{b} \cdot -1\\

\end{array}
double f(double a, double b, double c) {
        double r70326 = b;
        double r70327 = -r70326;
        double r70328 = r70326 * r70326;
        double r70329 = 4.0;
        double r70330 = a;
        double r70331 = c;
        double r70332 = r70330 * r70331;
        double r70333 = r70329 * r70332;
        double r70334 = r70328 - r70333;
        double r70335 = sqrt(r70334);
        double r70336 = r70327 + r70335;
        double r70337 = 2.0;
        double r70338 = r70337 * r70330;
        double r70339 = r70336 / r70338;
        return r70339;
}

double f(double a, double b, double c) {
        double r70340 = b;
        double r70341 = -3.9950858563514354e+21;
        bool r70342 = r70340 <= r70341;
        double r70343 = c;
        double r70344 = r70343 / r70340;
        double r70345 = a;
        double r70346 = r70340 / r70345;
        double r70347 = r70344 - r70346;
        double r70348 = 1.0;
        double r70349 = r70347 * r70348;
        double r70350 = 1.3696631973385881e-61;
        bool r70351 = r70340 <= r70350;
        double r70352 = r70340 * r70340;
        double r70353 = r70345 * r70343;
        double r70354 = 4.0;
        double r70355 = r70353 * r70354;
        double r70356 = r70352 - r70355;
        double r70357 = sqrt(r70356);
        double r70358 = -r70340;
        double r70359 = r70357 + r70358;
        double r70360 = 1.0;
        double r70361 = r70360 / r70345;
        double r70362 = 2.0;
        double r70363 = r70361 / r70362;
        double r70364 = r70359 * r70363;
        double r70365 = -1.0;
        double r70366 = r70344 * r70365;
        double r70367 = r70351 ? r70364 : r70366;
        double r70368 = r70342 ? r70349 : r70367;
        return r70368;
}

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.6
Target21.0
Herbie10.3
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \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 3 regimes
  2. if b < -3.9950858563514354e+21

    1. Initial program 35.4

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

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

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

    if -3.9950858563514354e+21 < b < 1.3696631973385881e-61

    1. Initial program 14.6

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

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

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

    if 1.3696631973385881e-61 < b

    1. Initial program 53.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 div-inv53.7

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

      \[\leadsto \left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \color{blue}{\frac{\frac{1}{a}}{2}}\]
    5. Taylor expanded around inf 8.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3995085856351435358208:\\ \;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\ \mathbf{elif}\;b \le 1.369663197338588139608765037558519461426 \cdot 10^{-61}:\\ \;\;\;\;\left(\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} + \left(-b\right)\right) \cdot \frac{\frac{1}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot -1\\ \end{array}\]

Reproduce

herbie shell --seed 2019194 
(FPCore (a b c)
  :name "quadp (p42, positive)"

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

  (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))