Average Error: 34.5 → 8.7
Time: 6.3s
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 -8.889080831912834239838349081155498349678 \cdot 10^{153}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 7.666823646884851555969061278738005639466 \cdot 10^{-125}:\\ \;\;\;\;\frac{\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2}}{a}\\ \mathbf{elif}\;b \le 4.748509933493459937245034418847441018411 \cdot 10^{91}:\\ \;\;\;\;\frac{\frac{1}{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{4}}}{2} \cdot \frac{a \cdot c}{a}\\ \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 -8.889080831912834239838349081155498349678 \cdot 10^{153}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r75879 = b;
        double r75880 = -r75879;
        double r75881 = r75879 * r75879;
        double r75882 = 4.0;
        double r75883 = a;
        double r75884 = c;
        double r75885 = r75883 * r75884;
        double r75886 = r75882 * r75885;
        double r75887 = r75881 - r75886;
        double r75888 = sqrt(r75887);
        double r75889 = r75880 + r75888;
        double r75890 = 2.0;
        double r75891 = r75890 * r75883;
        double r75892 = r75889 / r75891;
        return r75892;
}

double f(double a, double b, double c) {
        double r75893 = b;
        double r75894 = -8.889080831912834e+153;
        bool r75895 = r75893 <= r75894;
        double r75896 = 1.0;
        double r75897 = c;
        double r75898 = r75897 / r75893;
        double r75899 = a;
        double r75900 = r75893 / r75899;
        double r75901 = r75898 - r75900;
        double r75902 = r75896 * r75901;
        double r75903 = 7.666823646884852e-125;
        bool r75904 = r75893 <= r75903;
        double r75905 = -r75893;
        double r75906 = r75893 * r75893;
        double r75907 = 4.0;
        double r75908 = r75899 * r75897;
        double r75909 = r75907 * r75908;
        double r75910 = r75906 - r75909;
        double r75911 = sqrt(r75910);
        double r75912 = r75905 + r75911;
        double r75913 = 2.0;
        double r75914 = r75912 / r75913;
        double r75915 = r75914 / r75899;
        double r75916 = 4.74850993349346e+91;
        bool r75917 = r75893 <= r75916;
        double r75918 = 1.0;
        double r75919 = r75905 - r75911;
        double r75920 = r75919 / r75907;
        double r75921 = r75918 / r75920;
        double r75922 = r75921 / r75913;
        double r75923 = r75908 / r75899;
        double r75924 = r75922 * r75923;
        double r75925 = -1.0;
        double r75926 = r75925 * r75898;
        double r75927 = r75917 ? r75924 : r75926;
        double r75928 = r75904 ? r75915 : r75927;
        double r75929 = r75895 ? r75902 : r75928;
        return r75929;
}

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.5
Target20.8
Herbie8.7
\[\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 < -8.889080831912834e+153

    1. Initial program 64.0

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

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

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

    if -8.889080831912834e+153 < b < 7.666823646884852e-125

    1. Initial program 11.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 associate-/r*11.0

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

    if 7.666823646884852e-125 < b < 4.74850993349346e+91

    1. Initial program 40.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 flip-+40.1

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

      \[\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 clear-num16.1

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

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

      \[\leadsto \frac{\frac{1}{\color{blue}{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{4} \cdot \frac{1}{a \cdot c}}}}{2 \cdot a}\]
    10. Applied add-sqr-sqrt16.5

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

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

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

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

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

    if 4.74850993349346e+91 < b

    1. Initial program 59.5

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -8.889080831912834239838349081155498349678 \cdot 10^{153}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 7.666823646884851555969061278738005639466 \cdot 10^{-125}:\\ \;\;\;\;\frac{\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2}}{a}\\ \mathbf{elif}\;b \le 4.748509933493459937245034418847441018411 \cdot 10^{91}:\\ \;\;\;\;\frac{\frac{1}{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{4}}}{2} \cdot \frac{a \cdot c}{a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019347 +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)))