Average Error: 34.4 → 10.4
Time: 4.0s
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.1515494582665793 \cdot 10^{-119}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 3.669945833512195 \cdot 10^{117}:\\ \;\;\;\;\left(\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}\right) \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}\\ \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.1515494582665793 \cdot 10^{-119}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\

\mathbf{elif}\;b_2 \le 3.669945833512195 \cdot 10^{117}:\\
\;\;\;\;\left(\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}\right) \cdot \frac{1}{a}\\

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

\end{array}
double f(double a, double b_2, double c) {
        double r47489 = b_2;
        double r47490 = -r47489;
        double r47491 = r47489 * r47489;
        double r47492 = a;
        double r47493 = c;
        double r47494 = r47492 * r47493;
        double r47495 = r47491 - r47494;
        double r47496 = sqrt(r47495);
        double r47497 = r47490 - r47496;
        double r47498 = r47497 / r47492;
        return r47498;
}

double f(double a, double b_2, double c) {
        double r47499 = b_2;
        double r47500 = -4.1515494582665793e-119;
        bool r47501 = r47499 <= r47500;
        double r47502 = -0.5;
        double r47503 = c;
        double r47504 = r47503 / r47499;
        double r47505 = r47502 * r47504;
        double r47506 = 3.669945833512195e+117;
        bool r47507 = r47499 <= r47506;
        double r47508 = -r47499;
        double r47509 = r47499 * r47499;
        double r47510 = a;
        double r47511 = r47510 * r47503;
        double r47512 = r47509 - r47511;
        double r47513 = sqrt(r47512);
        double r47514 = r47508 - r47513;
        double r47515 = 1.0;
        double r47516 = r47515 / r47510;
        double r47517 = r47514 * r47516;
        double r47518 = 0.5;
        double r47519 = r47518 * r47504;
        double r47520 = 2.0;
        double r47521 = r47499 / r47510;
        double r47522 = r47520 * r47521;
        double r47523 = r47519 - r47522;
        double r47524 = r47507 ? r47517 : r47523;
        double r47525 = r47501 ? r47505 : r47524;
        return r47525;
}

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.1515494582665793e-119

    1. Initial program 51.5

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

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

    if -4.1515494582665793e-119 < b_2 < 3.669945833512195e+117

    1. Initial program 11.7

      \[\frac{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    2. Using strategy rm
    3. Applied div-inv11.8

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

    if 3.669945833512195e+117 < b_2

    1. Initial program 52.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -4.1515494582665793 \cdot 10^{-119}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 3.669945833512195 \cdot 10^{117}:\\ \;\;\;\;\left(\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}\right) \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2020081 +o rules:numerics
(FPCore (a b_2 c)
  :name "NMSE problem 3.2.1"
  :precision binary64
  (/ (- (- b_2) (sqrt (- (* b_2 b_2) (* a c)))) a))