Average Error: 33.8 → 10.7
Time: 39.2s
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 -6.178777554815223 \cdot 10^{-59}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\ \mathbf{elif}\;b \le -2.4426257271971575 \cdot 10^{-81}:\\ \;\;\;\;\frac{\frac{-b}{a} - \frac{\sqrt{\mathsf{fma}\left(c, a \cdot -4, b \cdot b\right)}}{a}}{2}\\ \mathbf{elif}\;b \le -2.1997396407715757 \cdot 10^{-160}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\ \mathbf{elif}\;b \le 7.548494687587984 \cdot 10^{+83}:\\ \;\;\;\;\frac{\frac{-b}{a} - \frac{\sqrt{\mathsf{fma}\left(c, a \cdot -4, b \cdot b\right)}}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{2 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}{2}\\ \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 -6.178777554815223 \cdot 10^{-59}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\

\mathbf{elif}\;b \le -2.4426257271971575 \cdot 10^{-81}:\\
\;\;\;\;\frac{\frac{-b}{a} - \frac{\sqrt{\mathsf{fma}\left(c, a \cdot -4, b \cdot b\right)}}{a}}{2}\\

\mathbf{elif}\;b \le -2.1997396407715757 \cdot 10^{-160}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\

\mathbf{elif}\;b \le 7.548494687587984 \cdot 10^{+83}:\\
\;\;\;\;\frac{\frac{-b}{a} - \frac{\sqrt{\mathsf{fma}\left(c, a \cdot -4, b \cdot b\right)}}{a}}{2}\\

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

\end{array}
double f(double a, double b, double c) {
        double r3577077 = b;
        double r3577078 = -r3577077;
        double r3577079 = r3577077 * r3577077;
        double r3577080 = 4.0;
        double r3577081 = a;
        double r3577082 = c;
        double r3577083 = r3577081 * r3577082;
        double r3577084 = r3577080 * r3577083;
        double r3577085 = r3577079 - r3577084;
        double r3577086 = sqrt(r3577085);
        double r3577087 = r3577078 - r3577086;
        double r3577088 = 2.0;
        double r3577089 = r3577088 * r3577081;
        double r3577090 = r3577087 / r3577089;
        return r3577090;
}

double f(double a, double b, double c) {
        double r3577091 = b;
        double r3577092 = -6.178777554815223e-59;
        bool r3577093 = r3577091 <= r3577092;
        double r3577094 = -2.0;
        double r3577095 = c;
        double r3577096 = r3577095 / r3577091;
        double r3577097 = r3577094 * r3577096;
        double r3577098 = 2.0;
        double r3577099 = r3577097 / r3577098;
        double r3577100 = -2.4426257271971575e-81;
        bool r3577101 = r3577091 <= r3577100;
        double r3577102 = -r3577091;
        double r3577103 = a;
        double r3577104 = r3577102 / r3577103;
        double r3577105 = -4.0;
        double r3577106 = r3577103 * r3577105;
        double r3577107 = r3577091 * r3577091;
        double r3577108 = fma(r3577095, r3577106, r3577107);
        double r3577109 = sqrt(r3577108);
        double r3577110 = r3577109 / r3577103;
        double r3577111 = r3577104 - r3577110;
        double r3577112 = r3577111 / r3577098;
        double r3577113 = -2.1997396407715757e-160;
        bool r3577114 = r3577091 <= r3577113;
        double r3577115 = 7.548494687587984e+83;
        bool r3577116 = r3577091 <= r3577115;
        double r3577117 = r3577091 / r3577103;
        double r3577118 = r3577096 - r3577117;
        double r3577119 = r3577098 * r3577118;
        double r3577120 = r3577119 / r3577098;
        double r3577121 = r3577116 ? r3577112 : r3577120;
        double r3577122 = r3577114 ? r3577099 : r3577121;
        double r3577123 = r3577101 ? r3577112 : r3577122;
        double r3577124 = r3577093 ? r3577099 : r3577123;
        return r3577124;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.8
Target20.8
Herbie10.7
\[\begin{array}{l} \mathbf{if}\;b \lt 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 < -6.178777554815223e-59 or -2.4426257271971575e-81 < b < -2.1997396407715757e-160

    1. Initial program 50.3

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

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

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

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

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

    if -6.178777554815223e-59 < b < -2.4426257271971575e-81 or -2.1997396407715757e-160 < b < 7.548494687587984e+83

    1. Initial program 12.0

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

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

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

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

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

    if 7.548494687587984e+83 < b

    1. Initial program 42.5

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

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

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -6.178777554815223 \cdot 10^{-59}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\ \mathbf{elif}\;b \le -2.4426257271971575 \cdot 10^{-81}:\\ \;\;\;\;\frac{\frac{-b}{a} - \frac{\sqrt{\mathsf{fma}\left(c, a \cdot -4, b \cdot b\right)}}{a}}{2}\\ \mathbf{elif}\;b \le -2.1997396407715757 \cdot 10^{-160}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\ \mathbf{elif}\;b \le 7.548494687587984 \cdot 10^{+83}:\\ \;\;\;\;\frac{\frac{-b}{a} - \frac{\sqrt{\mathsf{fma}\left(c, a \cdot -4, b \cdot b\right)}}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{2 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}{2}\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< b 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)))