Average Error: 34.1 → 8.6
Time: 6.5s
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 -4.28731338523231927980681449927859365128 \cdot 10^{78}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le -3.914307195398066377772349987498596241276 \cdot 10^{-230}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}} \cdot \sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}{2 \cdot a}\\ \mathbf{elif}\;b \le 3.314242005915538169906364876769500015544 \cdot 10^{99}:\\ \;\;\;\;1 \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{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 -4.28731338523231927980681449927859365128 \cdot 10^{78}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

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

\mathbf{elif}\;b \le 3.314242005915538169906364876769500015544 \cdot 10^{99}:\\
\;\;\;\;1 \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{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 r83223 = b;
        double r83224 = -r83223;
        double r83225 = r83223 * r83223;
        double r83226 = 4.0;
        double r83227 = a;
        double r83228 = c;
        double r83229 = r83227 * r83228;
        double r83230 = r83226 * r83229;
        double r83231 = r83225 - r83230;
        double r83232 = sqrt(r83231);
        double r83233 = r83224 + r83232;
        double r83234 = 2.0;
        double r83235 = r83234 * r83227;
        double r83236 = r83233 / r83235;
        return r83236;
}

double f(double a, double b, double c) {
        double r83237 = b;
        double r83238 = -4.287313385232319e+78;
        bool r83239 = r83237 <= r83238;
        double r83240 = 1.0;
        double r83241 = c;
        double r83242 = r83241 / r83237;
        double r83243 = a;
        double r83244 = r83237 / r83243;
        double r83245 = r83242 - r83244;
        double r83246 = r83240 * r83245;
        double r83247 = -3.9143071953980664e-230;
        bool r83248 = r83237 <= r83247;
        double r83249 = -r83237;
        double r83250 = r83237 * r83237;
        double r83251 = 4.0;
        double r83252 = r83243 * r83241;
        double r83253 = r83251 * r83252;
        double r83254 = r83250 - r83253;
        double r83255 = sqrt(r83254);
        double r83256 = sqrt(r83255);
        double r83257 = r83256 * r83256;
        double r83258 = r83249 + r83257;
        double r83259 = 2.0;
        double r83260 = r83259 * r83243;
        double r83261 = r83258 / r83260;
        double r83262 = 3.314242005915538e+99;
        bool r83263 = r83237 <= r83262;
        double r83264 = 1.0;
        double r83265 = r83253 / r83260;
        double r83266 = r83249 - r83255;
        double r83267 = r83265 / r83266;
        double r83268 = r83264 * r83267;
        double r83269 = -1.0;
        double r83270 = r83269 * r83242;
        double r83271 = r83263 ? r83268 : r83270;
        double r83272 = r83248 ? r83261 : r83271;
        double r83273 = r83239 ? r83246 : r83272;
        return r83273;
}

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.1
Target20.7
Herbie8.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 4 regimes
  2. if b < -4.287313385232319e+78

    1. Initial program 41.5

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

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

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

    if -4.287313385232319e+78 < b < -3.9143071953980664e-230

    1. Initial program 7.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 add-sqr-sqrt7.7

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

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

    if -3.9143071953980664e-230 < b < 3.314242005915538e+99

    1. Initial program 30.8

      \[\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-+30.8

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

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

      \[\leadsto \color{blue}{\frac{0 + 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}}\]
    7. Using strategy rm
    8. Applied *-un-lft-identity16.4

      \[\leadsto \color{blue}{\left(1 \cdot \frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\right)} \cdot \frac{1}{2 \cdot a}\]
    9. Applied associate-*l*16.4

      \[\leadsto \color{blue}{1 \cdot \left(\frac{0 + 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}\right)}\]
    10. Simplified15.5

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

    if 3.314242005915538e+99 < b

    1. Initial program 59.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -4.28731338523231927980681449927859365128 \cdot 10^{78}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le -3.914307195398066377772349987498596241276 \cdot 10^{-230}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}} \cdot \sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}{2 \cdot a}\\ \mathbf{elif}\;b \le 3.314242005915538169906364876769500015544 \cdot 10^{99}:\\ \;\;\;\;1 \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{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 2019352 
(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)))