Average Error: 33.8 → 9.3
Time: 20.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 -0.03099989563658142946445117615894560003653:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -2.501186677105648684932975589367300398392 \cdot 10^{-154}:\\ \;\;\;\;\frac{\frac{\left(b \cdot b - b \cdot b\right) + a \cdot \left(c \cdot 4\right)}{a \cdot 2}}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} + \left(-b\right)}\\ \mathbf{elif}\;b \le 63580190853209333432320:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{a \cdot 2}\\ \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 -0.03099989563658142946445117615894560003653:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r3926244 = b;
        double r3926245 = -r3926244;
        double r3926246 = r3926244 * r3926244;
        double r3926247 = 4.0;
        double r3926248 = a;
        double r3926249 = c;
        double r3926250 = r3926248 * r3926249;
        double r3926251 = r3926247 * r3926250;
        double r3926252 = r3926246 - r3926251;
        double r3926253 = sqrt(r3926252);
        double r3926254 = r3926245 - r3926253;
        double r3926255 = 2.0;
        double r3926256 = r3926255 * r3926248;
        double r3926257 = r3926254 / r3926256;
        return r3926257;
}

double f(double a, double b, double c) {
        double r3926258 = b;
        double r3926259 = -0.03099989563658143;
        bool r3926260 = r3926258 <= r3926259;
        double r3926261 = -1.0;
        double r3926262 = c;
        double r3926263 = r3926262 / r3926258;
        double r3926264 = r3926261 * r3926263;
        double r3926265 = -2.5011866771056487e-154;
        bool r3926266 = r3926258 <= r3926265;
        double r3926267 = r3926258 * r3926258;
        double r3926268 = r3926267 - r3926267;
        double r3926269 = a;
        double r3926270 = 4.0;
        double r3926271 = r3926262 * r3926270;
        double r3926272 = r3926269 * r3926271;
        double r3926273 = r3926268 + r3926272;
        double r3926274 = 2.0;
        double r3926275 = r3926269 * r3926274;
        double r3926276 = r3926273 / r3926275;
        double r3926277 = r3926269 * r3926262;
        double r3926278 = r3926277 * r3926270;
        double r3926279 = r3926267 - r3926278;
        double r3926280 = sqrt(r3926279);
        double r3926281 = -r3926258;
        double r3926282 = r3926280 + r3926281;
        double r3926283 = r3926276 / r3926282;
        double r3926284 = 6.358019085320933e+22;
        bool r3926285 = r3926258 <= r3926284;
        double r3926286 = r3926281 - r3926280;
        double r3926287 = r3926286 / r3926275;
        double r3926288 = 1.0;
        double r3926289 = r3926258 / r3926269;
        double r3926290 = r3926263 - r3926289;
        double r3926291 = r3926288 * r3926290;
        double r3926292 = r3926285 ? r3926287 : r3926291;
        double r3926293 = r3926266 ? r3926283 : r3926292;
        double r3926294 = r3926260 ? r3926264 : r3926293;
        return r3926294;
}

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
Target20.8
Herbie9.3
\[\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 < -0.03099989563658143

    1. Initial program 55.6

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

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

    if -0.03099989563658143 < b < -2.5011866771056487e-154

    1. Initial program 31.3

      \[\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-inv31.4

      \[\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. Using strategy rm
    5. Applied flip--31.4

      \[\leadsto \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)}}} \cdot \frac{1}{2 \cdot a}\]
    6. Applied associate-*l/31.5

      \[\leadsto \color{blue}{\frac{\left(\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)}\right) \cdot \frac{1}{2 \cdot a}}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\]
    7. Simplified16.0

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

    if -2.5011866771056487e-154 < b < 6.358019085320933e+22

    1. Initial program 12.3

      \[\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-inv12.5

      \[\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. Using strategy rm
    5. Applied un-div-inv12.3

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

    if 6.358019085320933e+22 < b

    1. Initial program 33.1

      \[\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-inv33.2

      \[\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. Using strategy rm
    5. Applied un-div-inv33.1

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

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

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

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

Reproduce

herbie shell --seed 2019192 +o rules:numerics
(FPCore (a b c)
  :name "The quadratic formula (r2)"

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

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