Average Error: 34.8 → 10.6
Time: 5.2s
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 -6.6114837319571935 \cdot 10^{38}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 2.8340580980410285 \cdot 10^{-68}:\\ \;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{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 -6.6114837319571935 \cdot 10^{38}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r100209 = b;
        double r100210 = -r100209;
        double r100211 = r100209 * r100209;
        double r100212 = 4.0;
        double r100213 = a;
        double r100214 = c;
        double r100215 = r100213 * r100214;
        double r100216 = r100212 * r100215;
        double r100217 = r100211 - r100216;
        double r100218 = sqrt(r100217);
        double r100219 = r100210 + r100218;
        double r100220 = 2.0;
        double r100221 = r100220 * r100213;
        double r100222 = r100219 / r100221;
        return r100222;
}

double f(double a, double b, double c) {
        double r100223 = b;
        double r100224 = -6.6114837319571935e+38;
        bool r100225 = r100223 <= r100224;
        double r100226 = 1.0;
        double r100227 = c;
        double r100228 = r100227 / r100223;
        double r100229 = a;
        double r100230 = r100223 / r100229;
        double r100231 = r100228 - r100230;
        double r100232 = r100226 * r100231;
        double r100233 = 2.8340580980410285e-68;
        bool r100234 = r100223 <= r100233;
        double r100235 = 1.0;
        double r100236 = 2.0;
        double r100237 = r100236 * r100229;
        double r100238 = -r100223;
        double r100239 = r100223 * r100223;
        double r100240 = 4.0;
        double r100241 = r100229 * r100227;
        double r100242 = r100240 * r100241;
        double r100243 = r100239 - r100242;
        double r100244 = sqrt(r100243);
        double r100245 = r100238 + r100244;
        double r100246 = r100237 / r100245;
        double r100247 = r100235 / r100246;
        double r100248 = -1.0;
        double r100249 = r100248 * r100228;
        double r100250 = r100234 ? r100247 : r100249;
        double r100251 = r100225 ? r100232 : r100250;
        return r100251;
}

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.8
Target21.2
Herbie10.6
\[\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 < -6.6114837319571935e+38

    1. Initial program 36.8

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

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

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

    if -6.6114837319571935e+38 < b < 2.8340580980410285e-68

    1. Initial program 15.0

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

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

    if 2.8340580980410285e-68 < b

    1. Initial program 54.0

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

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

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

Reproduce

herbie shell --seed 2020039 +o rules:numerics
(FPCore (a b c)
  :name "quadp (p42, positive)"
  :precision binary64

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

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