Average Error: 28.8 → 14.6
Time: 25.0s
Precision: 64
\[1.053671212772350866701172186984739043147 \cdot 10^{-8} \lt a \lt 94906265.62425155937671661376953125 \land 1.053671212772350866701172186984739043147 \cdot 10^{-8} \lt b \lt 94906265.62425155937671661376953125 \land 1.053671212772350866701172186984739043147 \cdot 10^{-8} \lt c \lt 94906265.62425155937671661376953125\]
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c}}{a \cdot 3} \le -9.145157459673636059552769006497641157694 \cdot 10^{-6}:\\ \;\;\;\;\frac{\frac{\left(b \cdot b - \left(a \cdot 3\right) \cdot c\right) \cdot \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} - b \cdot \left(b \cdot b\right)}{b \cdot \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} + \left(\left(b \cdot b - \left(a \cdot 3\right) \cdot c\right) + b \cdot b\right)}}{a \cdot 3}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \cdot \frac{c}{b}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}
\begin{array}{l}
\mathbf{if}\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c}}{a \cdot 3} \le -9.145157459673636059552769006497641157694 \cdot 10^{-6}:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - \left(a \cdot 3\right) \cdot c\right) \cdot \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} - b \cdot \left(b \cdot b\right)}{b \cdot \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} + \left(\left(b \cdot b - \left(a \cdot 3\right) \cdot c\right) + b \cdot b\right)}}{a \cdot 3}\\

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

\end{array}
double f(double a, double b, double c) {
        double r3719467 = b;
        double r3719468 = -r3719467;
        double r3719469 = r3719467 * r3719467;
        double r3719470 = 3.0;
        double r3719471 = a;
        double r3719472 = r3719470 * r3719471;
        double r3719473 = c;
        double r3719474 = r3719472 * r3719473;
        double r3719475 = r3719469 - r3719474;
        double r3719476 = sqrt(r3719475);
        double r3719477 = r3719468 + r3719476;
        double r3719478 = r3719477 / r3719472;
        return r3719478;
}

double f(double a, double b, double c) {
        double r3719479 = b;
        double r3719480 = -r3719479;
        double r3719481 = r3719479 * r3719479;
        double r3719482 = a;
        double r3719483 = 3.0;
        double r3719484 = r3719482 * r3719483;
        double r3719485 = c;
        double r3719486 = r3719484 * r3719485;
        double r3719487 = r3719481 - r3719486;
        double r3719488 = sqrt(r3719487);
        double r3719489 = r3719480 + r3719488;
        double r3719490 = r3719489 / r3719484;
        double r3719491 = -9.145157459673636e-06;
        bool r3719492 = r3719490 <= r3719491;
        double r3719493 = r3719487 * r3719488;
        double r3719494 = r3719479 * r3719481;
        double r3719495 = r3719493 - r3719494;
        double r3719496 = r3719479 * r3719488;
        double r3719497 = r3719487 + r3719481;
        double r3719498 = r3719496 + r3719497;
        double r3719499 = r3719495 / r3719498;
        double r3719500 = r3719499 / r3719484;
        double r3719501 = -0.5;
        double r3719502 = r3719485 / r3719479;
        double r3719503 = r3719501 * r3719502;
        double r3719504 = r3719492 ? r3719500 : r3719503;
        return r3719504;
}

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

Derivation

  1. Split input into 2 regimes
  2. if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -9.145157459673636e-06

    1. Initial program 17.2

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied flip3-+17.2

      \[\leadsto \frac{\color{blue}{\frac{{\left(-b\right)}^{3} + {\left(\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}^{3}}{\left(-b\right) \cdot \left(-b\right) + \left(\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - \left(-b\right) \cdot \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}}}{3 \cdot a}\]
    4. Simplified16.6

      \[\leadsto \frac{\frac{\color{blue}{\sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} \cdot \left(b \cdot b - \left(a \cdot 3\right) \cdot c\right) - \left(b \cdot b\right) \cdot b}}{\left(-b\right) \cdot \left(-b\right) + \left(\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - \left(-b\right) \cdot \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}}{3 \cdot a}\]
    5. Simplified16.6

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

    if -9.145157459673636e-06 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a))

    1. Initial program 40.8

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

      \[\leadsto \color{blue}{-0.5 \cdot \frac{c}{b}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification14.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c}}{a \cdot 3} \le -9.145157459673636059552769006497641157694 \cdot 10^{-6}:\\ \;\;\;\;\frac{\frac{\left(b \cdot b - \left(a \cdot 3\right) \cdot c\right) \cdot \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} - b \cdot \left(b \cdot b\right)}{b \cdot \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} + \left(\left(b \cdot b - \left(a \cdot 3\right) \cdot c\right) + b \cdot b\right)}}{a \cdot 3}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019200 
(FPCore (a b c)
  :name "Cubic critical, narrow range"
  :pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)))