Average Error: 33.8 → 15.8
Time: 28.0s
Precision: 64
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -1.802032183745334768196101346563616909151 \cdot 10^{-307}:\\ \;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}}}{2}\\ \mathbf{elif}\;b \le 4.033968672442674816629306589314441243721 \cdot 10^{160}:\\ \;\;\;\;\frac{\left(\frac{a}{a} \cdot \frac{4 \cdot c}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}}}\right) \cdot \frac{-1}{\sqrt{\sqrt{\sqrt[3]{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}} \cdot \left|\sqrt[3]{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}\right| + b}}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(c \cdot \left(-a\right), 4, 0\right)}{b + b}}{a}}{2}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -1.802032183745334768196101346563616909151 \cdot 10^{-307}:\\
\;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}}}{2}\\

\mathbf{elif}\;b \le 4.033968672442674816629306589314441243721 \cdot 10^{160}:\\
\;\;\;\;\frac{\left(\frac{a}{a} \cdot \frac{4 \cdot c}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}}}\right) \cdot \frac{-1}{\sqrt{\sqrt{\sqrt[3]{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}} \cdot \left|\sqrt[3]{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}\right| + b}}}{2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(c \cdot \left(-a\right), 4, 0\right)}{b + b}}{a}}{2}\\

\end{array}
double f(double a, double b, double c) {
        double r129294 = b;
        double r129295 = -r129294;
        double r129296 = r129294 * r129294;
        double r129297 = 4.0;
        double r129298 = a;
        double r129299 = r129297 * r129298;
        double r129300 = c;
        double r129301 = r129299 * r129300;
        double r129302 = r129296 - r129301;
        double r129303 = sqrt(r129302);
        double r129304 = r129295 + r129303;
        double r129305 = 2.0;
        double r129306 = r129305 * r129298;
        double r129307 = r129304 / r129306;
        return r129307;
}

double f(double a, double b, double c) {
        double r129308 = b;
        double r129309 = -1.8020321837453348e-307;
        bool r129310 = r129308 <= r129309;
        double r129311 = 1.0;
        double r129312 = a;
        double r129313 = -r129312;
        double r129314 = 4.0;
        double r129315 = r129313 * r129314;
        double r129316 = c;
        double r129317 = r129308 * r129308;
        double r129318 = fma(r129315, r129316, r129317);
        double r129319 = sqrt(r129318);
        double r129320 = r129319 - r129308;
        double r129321 = r129312 / r129320;
        double r129322 = r129311 / r129321;
        double r129323 = 2.0;
        double r129324 = r129322 / r129323;
        double r129325 = 4.033968672442675e+160;
        bool r129326 = r129308 <= r129325;
        double r129327 = r129312 / r129312;
        double r129328 = r129314 * r129316;
        double r129329 = r129316 * r129313;
        double r129330 = fma(r129314, r129329, r129317);
        double r129331 = sqrt(r129330);
        double r129332 = r129308 + r129331;
        double r129333 = sqrt(r129332);
        double r129334 = r129328 / r129333;
        double r129335 = r129327 * r129334;
        double r129336 = -1.0;
        double r129337 = -r129328;
        double r129338 = fma(r129312, r129337, r129317);
        double r129339 = cbrt(r129338);
        double r129340 = sqrt(r129339);
        double r129341 = fabs(r129339);
        double r129342 = r129340 * r129341;
        double r129343 = r129342 + r129308;
        double r129344 = sqrt(r129343);
        double r129345 = r129336 / r129344;
        double r129346 = r129335 * r129345;
        double r129347 = r129346 / r129323;
        double r129348 = 0.0;
        double r129349 = fma(r129329, r129314, r129348);
        double r129350 = r129308 + r129308;
        double r129351 = r129349 / r129350;
        double r129352 = r129351 / r129312;
        double r129353 = r129352 / r129323;
        double r129354 = r129326 ? r129347 : r129353;
        double r129355 = r129310 ? r129324 : r129354;
        return r129355;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.8
Target20.6
Herbie15.8
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if b < -1.8020321837453348e-307

    1. Initial program 21.4

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified21.5

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied clear-num21.6

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} - b}}}}{2}\]
    5. Simplified21.5

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

    if -1.8020321837453348e-307 < b < 4.033968672442675e+160

    1. Initial program 35.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified35.3

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied flip--35.4

      \[\leadsto \frac{\frac{\color{blue}{\frac{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} \cdot \sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} - b \cdot b}{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} + b}}}{a}}{2}\]
    5. Simplified16.5

      \[\leadsto \frac{\frac{\frac{\color{blue}{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}}{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} + b}}{a}}{2}\]
    6. Simplified16.5

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\color{blue}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{a}}{2}\]
    7. Using strategy rm
    8. Applied *-un-lft-identity16.5

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}{\color{blue}{1 \cdot a}}}{2}\]
    9. Applied add-sqr-sqrt16.7

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\color{blue}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b} \cdot \sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}}{1 \cdot a}}{2}\]
    10. Applied *-un-lft-identity16.7

      \[\leadsto \frac{\frac{\frac{\color{blue}{1 \cdot \mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b} \cdot \sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{1 \cdot a}}{2}\]
    11. Applied times-frac16.7

      \[\leadsto \frac{\frac{\color{blue}{\frac{1}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}} \cdot \frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}}{1 \cdot a}}{2}\]
    12. Applied times-frac15.9

      \[\leadsto \frac{\color{blue}{\frac{\frac{1}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{1} \cdot \frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{a}}}{2}\]
    13. Simplified15.9

      \[\leadsto \frac{\color{blue}{\frac{1}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}} \cdot \frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\sqrt{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{a}}{2}\]
    14. Simplified9.3

      \[\leadsto \frac{\frac{1}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}} \cdot \color{blue}{\left(\frac{-a}{a} \cdot \frac{4 \cdot c}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}\right)}}{2}\]
    15. Using strategy rm
    16. Applied add-cube-cbrt9.4

      \[\leadsto \frac{\frac{1}{\sqrt{b + \sqrt{\color{blue}{\left(\sqrt[3]{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}}} \cdot \left(\frac{-a}{a} \cdot \frac{4 \cdot c}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}\right)}{2}\]
    17. Applied sqrt-prod9.4

      \[\leadsto \frac{\frac{1}{\sqrt{b + \color{blue}{\sqrt{\sqrt[3]{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}} \cdot \sqrt{\sqrt[3]{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}}} \cdot \left(\frac{-a}{a} \cdot \frac{4 \cdot c}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}\right)}{2}\]
    18. Simplified9.4

      \[\leadsto \frac{\frac{1}{\sqrt{b + \color{blue}{\left|\sqrt[3]{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}\right|} \cdot \sqrt{\sqrt[3]{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}} \cdot \left(\frac{-a}{a} \cdot \frac{4 \cdot c}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}\right)}{2}\]
    19. Simplified9.4

      \[\leadsto \frac{\frac{1}{\sqrt{b + \left|\sqrt[3]{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}\right| \cdot \color{blue}{\sqrt{\sqrt[3]{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}}}} \cdot \left(\frac{-a}{a} \cdot \frac{4 \cdot c}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}}\right)}{2}\]

    if 4.033968672442675e+160 < b

    1. Initial program 64.0

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified64.0

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied flip--64.0

      \[\leadsto \frac{\frac{\color{blue}{\frac{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} \cdot \sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} - b \cdot b}{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} + b}}}{a}}{2}\]
    5. Simplified38.6

      \[\leadsto \frac{\frac{\frac{\color{blue}{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}}{\sqrt{\mathsf{fma}\left(-a, 4 \cdot c, b \cdot b\right)} + b}}{a}}{2}\]
    6. Simplified38.6

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\color{blue}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{a}}{2}\]
    7. Taylor expanded around 0 14.6

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\color{blue}{b} + b}}{a}}{2}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification15.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.802032183745334768196101346563616909151 \cdot 10^{-307}:\\ \;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}}}{2}\\ \mathbf{elif}\;b \le 4.033968672442674816629306589314441243721 \cdot 10^{160}:\\ \;\;\;\;\frac{\left(\frac{a}{a} \cdot \frac{4 \cdot c}{\sqrt{b + \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}}}\right) \cdot \frac{-1}{\sqrt{\sqrt{\sqrt[3]{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}} \cdot \left|\sqrt[3]{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}\right| + b}}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(c \cdot \left(-a\right), 4, 0\right)}{b + b}}{a}}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019179 +o rules:numerics
(FPCore (a b c)
  :name "The quadratic formula (r1)"

  :herbie-target
  (if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))

  (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))