Average Error: 34.5 → 10.2
Time: 6.8s
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.3645547041066157 \cdot 10^{-80}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 4.1199128263687574 \cdot 10^{46}:\\ \;\;\;\;\frac{1}{\frac{1}{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}}\\ \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 -8.3645547041066157 \cdot 10^{-80}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r121937 = b;
        double r121938 = -r121937;
        double r121939 = r121937 * r121937;
        double r121940 = 4.0;
        double r121941 = a;
        double r121942 = c;
        double r121943 = r121941 * r121942;
        double r121944 = r121940 * r121943;
        double r121945 = r121939 - r121944;
        double r121946 = sqrt(r121945);
        double r121947 = r121938 - r121946;
        double r121948 = 2.0;
        double r121949 = r121948 * r121941;
        double r121950 = r121947 / r121949;
        return r121950;
}

double f(double a, double b, double c) {
        double r121951 = b;
        double r121952 = -8.364554704106616e-80;
        bool r121953 = r121951 <= r121952;
        double r121954 = -1.0;
        double r121955 = c;
        double r121956 = r121955 / r121951;
        double r121957 = r121954 * r121956;
        double r121958 = 4.1199128263687574e+46;
        bool r121959 = r121951 <= r121958;
        double r121960 = 1.0;
        double r121961 = -r121951;
        double r121962 = r121951 * r121951;
        double r121963 = 4.0;
        double r121964 = a;
        double r121965 = r121964 * r121955;
        double r121966 = r121963 * r121965;
        double r121967 = r121962 - r121966;
        double r121968 = sqrt(r121967);
        double r121969 = r121961 - r121968;
        double r121970 = 2.0;
        double r121971 = r121970 * r121964;
        double r121972 = r121969 / r121971;
        double r121973 = r121960 / r121972;
        double r121974 = r121960 / r121973;
        double r121975 = 1.0;
        double r121976 = r121951 / r121964;
        double r121977 = r121956 - r121976;
        double r121978 = r121975 * r121977;
        double r121979 = r121959 ? r121974 : r121978;
        double r121980 = r121953 ? r121957 : r121979;
        return r121980;
}

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
Target21.1
Herbie10.2
\[\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 3 regimes
  2. if b < -8.364554704106616e-80

    1. Initial program 53.8

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

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

    if -8.364554704106616e-80 < b < 4.1199128263687574e+46

    1. Initial program 13.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 clear-num13.9

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

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

    if 4.1199128263687574e+46 < b

    1. Initial program 36.8

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -8.3645547041066157 \cdot 10^{-80}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 4.1199128263687574 \cdot 10^{46}:\\ \;\;\;\;\frac{1}{\frac{1}{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020046 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"
  :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)))