Average Error: 33.8 → 10.2
Time: 18.8s
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 -3.56950087216670373365855698069146367898 \cdot 10^{75}:\\ \;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\ \mathbf{elif}\;b \le 3.362006515454413652749664796489007484285 \cdot 10^{-75}:\\ \;\;\;\;\frac{1}{\frac{a}{\sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} - b} \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;\frac{c \cdot -1}{b}\\ \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 -3.56950087216670373365855698069146367898 \cdot 10^{75}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r52297 = b;
        double r52298 = -r52297;
        double r52299 = r52297 * r52297;
        double r52300 = 4.0;
        double r52301 = a;
        double r52302 = c;
        double r52303 = r52301 * r52302;
        double r52304 = r52300 * r52303;
        double r52305 = r52299 - r52304;
        double r52306 = sqrt(r52305);
        double r52307 = r52298 + r52306;
        double r52308 = 2.0;
        double r52309 = r52308 * r52301;
        double r52310 = r52307 / r52309;
        return r52310;
}

double f(double a, double b, double c) {
        double r52311 = b;
        double r52312 = -3.5695008721667037e+75;
        bool r52313 = r52311 <= r52312;
        double r52314 = c;
        double r52315 = r52314 / r52311;
        double r52316 = a;
        double r52317 = r52311 / r52316;
        double r52318 = r52315 - r52317;
        double r52319 = 1.0;
        double r52320 = r52318 * r52319;
        double r52321 = 3.3620065154544137e-75;
        bool r52322 = r52311 <= r52321;
        double r52323 = 1.0;
        double r52324 = r52311 * r52311;
        double r52325 = 4.0;
        double r52326 = r52314 * r52316;
        double r52327 = r52325 * r52326;
        double r52328 = r52324 - r52327;
        double r52329 = sqrt(r52328);
        double r52330 = r52329 - r52311;
        double r52331 = r52316 / r52330;
        double r52332 = 2.0;
        double r52333 = r52331 * r52332;
        double r52334 = r52323 / r52333;
        double r52335 = -1.0;
        double r52336 = r52314 * r52335;
        double r52337 = r52336 / r52311;
        double r52338 = r52322 ? r52334 : r52337;
        double r52339 = r52313 ? r52320 : r52338;
        return r52339;
}

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

Original33.8
Target21.2
Herbie10.2
\[\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.5695008721667037e+75

    1. Initial program 42.1

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

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

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

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

    if -3.5695008721667037e+75 < b < 3.3620065154544137e-75

    1. Initial program 13.4

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

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

      \[\leadsto \frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{\color{blue}{1 \cdot 2}}}{a}\]
    5. Applied *-un-lft-identity13.4

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

      \[\leadsto \frac{\color{blue}{\frac{1}{1} \cdot \frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2}}}{a}\]
    7. Applied associate-/l*13.5

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

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

    if 3.3620065154544137e-75 < b

    1. Initial program 53.0

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

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

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
    4. Simplified9.3

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

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

Reproduce

herbie shell --seed 2019195 
(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)))