Average Error: 33.9 → 8.9
Time: 15.1s
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.020085128891057834325363211730480675064 \cdot 10^{108}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le \frac{4344526679424155}{1.161731959748268017810986326679609812603 \cdot 10^{282}}:\\ \;\;\;\;\frac{\frac{1}{2 \cdot a} \cdot \left(\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)\right)}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\ \mathbf{elif}\;b \le 1.715181108188238274259588142060201574853 \cdot 10^{78}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{b}{a}\\ \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.020085128891057834325363211730480675064 \cdot 10^{108}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r76150 = b;
        double r76151 = -r76150;
        double r76152 = r76150 * r76150;
        double r76153 = 4.0;
        double r76154 = a;
        double r76155 = c;
        double r76156 = r76154 * r76155;
        double r76157 = r76153 * r76156;
        double r76158 = r76152 - r76157;
        double r76159 = sqrt(r76158);
        double r76160 = r76151 - r76159;
        double r76161 = 2.0;
        double r76162 = r76161 * r76154;
        double r76163 = r76160 / r76162;
        return r76163;
}

double f(double a, double b, double c) {
        double r76164 = b;
        double r76165 = -4.020085128891058e+108;
        bool r76166 = r76164 <= r76165;
        double r76167 = -1.0;
        double r76168 = c;
        double r76169 = r76168 / r76164;
        double r76170 = r76167 * r76169;
        double r76171 = 4344526679424155.0;
        double r76172 = 1.161731959748268e+282;
        double r76173 = r76171 / r76172;
        bool r76174 = r76164 <= r76173;
        double r76175 = 1.0;
        double r76176 = 2.0;
        double r76177 = a;
        double r76178 = r76176 * r76177;
        double r76179 = r76175 / r76178;
        double r76180 = 2.0;
        double r76181 = pow(r76164, r76180);
        double r76182 = r76181 - r76181;
        double r76183 = 4.0;
        double r76184 = r76177 * r76168;
        double r76185 = r76183 * r76184;
        double r76186 = r76182 + r76185;
        double r76187 = r76179 * r76186;
        double r76188 = -r76164;
        double r76189 = r76164 * r76164;
        double r76190 = r76189 - r76185;
        double r76191 = sqrt(r76190);
        double r76192 = r76188 + r76191;
        double r76193 = r76187 / r76192;
        double r76194 = 1.7151811081882383e+78;
        bool r76195 = r76164 <= r76194;
        double r76196 = r76188 - r76191;
        double r76197 = r76196 / r76178;
        double r76198 = r76164 / r76177;
        double r76199 = r76167 * r76198;
        double r76200 = r76195 ? r76197 : r76199;
        double r76201 = r76174 ? r76193 : r76200;
        double r76202 = r76166 ? r76170 : r76201;
        return r76202;
}

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.9
Target21.0
Herbie8.9
\[\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 < -4.020085128891058e+108

    1. Initial program 59.6

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

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

    if -4.020085128891058e+108 < b < 3.7396979939895573e-267

    1. Initial program 31.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-inv31.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. Using strategy rm
    5. Applied flip--31.8

      \[\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.8

      \[\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. Simplified15.3

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

    if 3.7396979939895573e-267 < b < 1.7151811081882383e+78

    1. Initial program 8.6

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

    if 1.7151811081882383e+78 < b

    1. Initial program 43.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 div-inv43.0

      \[\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--62.6

      \[\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 frac-times63.1

      \[\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 1}{\left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \left(2 \cdot a\right)}}\]
    7. Simplified62.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -4.020085128891057834325363211730480675064 \cdot 10^{108}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le \frac{4344526679424155}{1.161731959748268017810986326679609812603 \cdot 10^{282}}:\\ \;\;\;\;\frac{\frac{1}{2 \cdot a} \cdot \left(\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)\right)}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\ \mathbf{elif}\;b \le 1.715181108188238274259588142060201574853 \cdot 10^{78}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{b}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2019303 
(FPCore (a b c)
  :name "The quadratic formula (r2)"
  :precision binary64

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

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