Average Error: 34.1 → 10.0
Time: 5.5s
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 -2.644409376808577592769878215530106196344 \cdot 10^{-69}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.542951486580225494391623071663800816645 \cdot 10^{93}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \frac{b}{a}\right)\\ \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 -2.644409376808577592769878215530106196344 \cdot 10^{-69}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le 2.542951486580225494391623071663800816645 \cdot 10^{93}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}{a}\\

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

\end{array}
double f(double a, double b, double c) {
        double r71811 = b;
        double r71812 = -r71811;
        double r71813 = r71811 * r71811;
        double r71814 = 4.0;
        double r71815 = a;
        double r71816 = c;
        double r71817 = r71815 * r71816;
        double r71818 = r71814 * r71817;
        double r71819 = r71813 - r71818;
        double r71820 = sqrt(r71819);
        double r71821 = r71812 - r71820;
        double r71822 = 2.0;
        double r71823 = r71822 * r71815;
        double r71824 = r71821 / r71823;
        return r71824;
}

double f(double a, double b, double c) {
        double r71825 = b;
        double r71826 = -2.6444093768085776e-69;
        bool r71827 = r71825 <= r71826;
        double r71828 = -1.0;
        double r71829 = c;
        double r71830 = r71829 / r71825;
        double r71831 = r71828 * r71830;
        double r71832 = 2.5429514865802255e+93;
        bool r71833 = r71825 <= r71832;
        double r71834 = 1.0;
        double r71835 = 2.0;
        double r71836 = r71834 / r71835;
        double r71837 = -r71825;
        double r71838 = r71825 * r71825;
        double r71839 = 4.0;
        double r71840 = a;
        double r71841 = r71840 * r71829;
        double r71842 = r71839 * r71841;
        double r71843 = r71838 - r71842;
        double r71844 = sqrt(r71843);
        double r71845 = r71837 - r71844;
        double r71846 = r71834 * r71845;
        double r71847 = r71846 / r71840;
        double r71848 = r71836 * r71847;
        double r71849 = -2.0;
        double r71850 = r71825 / r71840;
        double r71851 = r71849 * r71850;
        double r71852 = r71836 * r71851;
        double r71853 = r71833 ? r71848 : r71852;
        double r71854 = r71827 ? r71831 : r71853;
        return r71854;
}

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

Target

Original34.1
Target20.8
Herbie10.0
\[\begin{array}{l} \mathbf{if}\;b \lt 0.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 < -2.6444093768085776e-69

    1. Initial program 53.4

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

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

    if -2.6444093768085776e-69 < b < 2.5429514865802255e+93

    1. Initial program 13.4

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity13.4

      \[\leadsto \frac{\color{blue}{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}\]
    4. Applied times-frac13.4

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{a}}\]
    5. Using strategy rm
    6. Applied add-exp-log16.5

      \[\leadsto \frac{1}{2} \cdot \frac{\left(-b\right) - \color{blue}{e^{\log \left(\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}}{a}\]
    7. Using strategy rm
    8. Applied *-un-lft-identity16.5

      \[\leadsto \frac{1}{2} \cdot \frac{\left(-b\right) - \color{blue}{1 \cdot e^{\log \left(\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}}{a}\]
    9. Applied *-un-lft-identity16.5

      \[\leadsto \frac{1}{2} \cdot \frac{\color{blue}{1 \cdot \left(-b\right)} - 1 \cdot e^{\log \left(\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{a}\]
    10. Applied distribute-lft-out--16.5

      \[\leadsto \frac{1}{2} \cdot \frac{\color{blue}{1 \cdot \left(\left(-b\right) - e^{\log \left(\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}\right)}}{a}\]
    11. Simplified13.4

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

    if 2.5429514865802255e+93 < b

    1. Initial program 45.2

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity45.2

      \[\leadsto \frac{\color{blue}{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}\]
    4. Applied times-frac45.2

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

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\frac{1}{\frac{a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}\]
    7. Taylor expanded around 0 3.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.644409376808577592769878215530106196344 \cdot 10^{-69}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.542951486580225494391623071663800816645 \cdot 10^{93}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019347 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"
  :precision binary64

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