Average Error: 34.3 → 7.1
Time: 39.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 -6.05669002671933381232315467688999002364 \cdot 10^{153}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 3.411004807395853104361669776563711353544 \cdot 10^{-303}:\\ \;\;\;\;\frac{\frac{c \cdot 4}{2}}{\sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} + \left(-b\right)}\\ \mathbf{elif}\;b \le 0.173897874048477174557802982235443778336:\\ \;\;\;\;\frac{b + \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)}}{\left(-a\right) \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 -6.05669002671933381232315467688999002364 \cdot 10^{153}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

\mathbf{elif}\;b \le 0.173897874048477174557802982235443778336:\\
\;\;\;\;\frac{b + \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)}}{\left(-a\right) \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 r2988896 = b;
        double r2988897 = -r2988896;
        double r2988898 = r2988896 * r2988896;
        double r2988899 = 4.0;
        double r2988900 = a;
        double r2988901 = c;
        double r2988902 = r2988900 * r2988901;
        double r2988903 = r2988899 * r2988902;
        double r2988904 = r2988898 - r2988903;
        double r2988905 = sqrt(r2988904);
        double r2988906 = r2988897 - r2988905;
        double r2988907 = 2.0;
        double r2988908 = r2988907 * r2988900;
        double r2988909 = r2988906 / r2988908;
        return r2988909;
}

double f(double a, double b, double c) {
        double r2988910 = b;
        double r2988911 = -6.056690026719334e+153;
        bool r2988912 = r2988910 <= r2988911;
        double r2988913 = -1.0;
        double r2988914 = c;
        double r2988915 = r2988914 / r2988910;
        double r2988916 = r2988913 * r2988915;
        double r2988917 = 3.411004807395853e-303;
        bool r2988918 = r2988910 <= r2988917;
        double r2988919 = 4.0;
        double r2988920 = r2988914 * r2988919;
        double r2988921 = 2.0;
        double r2988922 = r2988920 / r2988921;
        double r2988923 = r2988910 * r2988910;
        double r2988924 = a;
        double r2988925 = r2988914 * r2988924;
        double r2988926 = r2988919 * r2988925;
        double r2988927 = r2988923 - r2988926;
        double r2988928 = sqrt(r2988927);
        double r2988929 = -r2988910;
        double r2988930 = r2988928 + r2988929;
        double r2988931 = r2988922 / r2988930;
        double r2988932 = 0.17389787404847717;
        bool r2988933 = r2988910 <= r2988932;
        double r2988934 = r2988910 + r2988928;
        double r2988935 = -r2988924;
        double r2988936 = r2988935 * r2988921;
        double r2988937 = r2988934 / r2988936;
        double r2988938 = 1.0;
        double r2988939 = r2988910 / r2988924;
        double r2988940 = r2988915 - r2988939;
        double r2988941 = r2988938 * r2988940;
        double r2988942 = r2988933 ? r2988937 : r2988941;
        double r2988943 = r2988918 ? r2988931 : r2988942;
        double r2988944 = r2988912 ? r2988916 : r2988943;
        return r2988944;
}

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.3
Target21.3
Herbie7.1
\[\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 < -6.056690026719334e+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 1.1

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

    if -6.056690026719334e+153 < b < 3.411004807395853e-303

    1. Initial program 34.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-inv34.1

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

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

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

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

    if 3.411004807395853e-303 < b < 0.17389787404847717

    1. Initial program 11.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 frac-2neg11.3

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

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

    if 0.17389787404847717 < b

    1. Initial program 31.2

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -6.05669002671933381232315467688999002364 \cdot 10^{153}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 3.411004807395853104361669776563711353544 \cdot 10^{-303}:\\ \;\;\;\;\frac{\frac{c \cdot 4}{2}}{\sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} + \left(-b\right)}\\ \mathbf{elif}\;b \le 0.173897874048477174557802982235443778336:\\ \;\;\;\;\frac{b + \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)}}{\left(-a\right) \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019168 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"

  :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)))