Average Error: 34.0 → 9.9
Time: 5.5s
Precision: 64
\[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
\[\begin{array}{l} \mathbf{if}\;b_2 \le -4.296711505503404627729963869764946127539 \cdot 10^{132}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}\\ \mathbf{elif}\;b_2 \le 9.800093806317491560562024775087327286248 \cdot 10^{-70}:\\ \;\;\;\;\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \end{array}\]
\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}
\begin{array}{l}
\mathbf{if}\;b_2 \le -4.296711505503404627729963869764946127539 \cdot 10^{132}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}\\

\mathbf{elif}\;b_2 \le 9.800093806317491560562024775087327286248 \cdot 10^{-70}:\\
\;\;\;\;\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\\

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

\end{array}
double f(double a, double b_2, double c) {
        double r18101 = b_2;
        double r18102 = -r18101;
        double r18103 = r18101 * r18101;
        double r18104 = a;
        double r18105 = c;
        double r18106 = r18104 * r18105;
        double r18107 = r18103 - r18106;
        double r18108 = sqrt(r18107);
        double r18109 = r18102 + r18108;
        double r18110 = r18109 / r18104;
        return r18110;
}

double f(double a, double b_2, double c) {
        double r18111 = b_2;
        double r18112 = -4.2967115055034046e+132;
        bool r18113 = r18111 <= r18112;
        double r18114 = 0.5;
        double r18115 = c;
        double r18116 = r18115 / r18111;
        double r18117 = r18114 * r18116;
        double r18118 = 2.0;
        double r18119 = a;
        double r18120 = r18111 / r18119;
        double r18121 = r18118 * r18120;
        double r18122 = r18117 - r18121;
        double r18123 = 9.800093806317492e-70;
        bool r18124 = r18111 <= r18123;
        double r18125 = -r18111;
        double r18126 = r18111 * r18111;
        double r18127 = r18119 * r18115;
        double r18128 = r18126 - r18127;
        double r18129 = sqrt(r18128);
        double r18130 = r18125 + r18129;
        double r18131 = r18130 / r18119;
        double r18132 = -0.5;
        double r18133 = r18132 * r18116;
        double r18134 = r18124 ? r18131 : r18133;
        double r18135 = r18113 ? r18122 : r18134;
        return r18135;
}

Error

Bits error versus a

Bits error versus b_2

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if b_2 < -4.2967115055034046e+132

    1. Initial program 55.4

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

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}}\]

    if -4.2967115055034046e+132 < b_2 < 9.800093806317492e-70

    1. Initial program 12.8

      \[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]

    if 9.800093806317492e-70 < b_2

    1. Initial program 53.5

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

      \[\leadsto \color{blue}{\frac{-1}{2} \cdot \frac{c}{b_2}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification9.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -4.296711505503404627729963869764946127539 \cdot 10^{132}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}\\ \mathbf{elif}\;b_2 \le 9.800093806317491560562024775087327286248 \cdot 10^{-70}:\\ \;\;\;\;\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \end{array}\]

Reproduce

herbie shell --seed 2020001 
(FPCore (a b_2 c)
  :name "quad2p (problem 3.2.1, positive)"
  :precision binary64
  (/ (+ (- b_2) (sqrt (- (* b_2 b_2) (* a c)))) a))