Average Error: 33.5 → 10.0
Time: 6.6s
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 -4.0323767944871679 \cdot 10^{127}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 1.17528679488360856 \cdot 10^{-69}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \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 -4.0323767944871679 \cdot 10^{127}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

\mathbf{elif}\;b \le 1.17528679488360856 \cdot 10^{-69}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\

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

\end{array}
double f(double a, double b, double c) {
        double r110762 = b;
        double r110763 = -r110762;
        double r110764 = r110762 * r110762;
        double r110765 = 4.0;
        double r110766 = a;
        double r110767 = c;
        double r110768 = r110766 * r110767;
        double r110769 = r110765 * r110768;
        double r110770 = r110764 - r110769;
        double r110771 = sqrt(r110770);
        double r110772 = r110763 + r110771;
        double r110773 = 2.0;
        double r110774 = r110773 * r110766;
        double r110775 = r110772 / r110774;
        return r110775;
}

double f(double a, double b, double c) {
        double r110776 = b;
        double r110777 = -4.032376794487168e+127;
        bool r110778 = r110776 <= r110777;
        double r110779 = 1.0;
        double r110780 = c;
        double r110781 = r110780 / r110776;
        double r110782 = a;
        double r110783 = r110776 / r110782;
        double r110784 = r110781 - r110783;
        double r110785 = r110779 * r110784;
        double r110786 = 1.1752867948836086e-69;
        bool r110787 = r110776 <= r110786;
        double r110788 = -r110776;
        double r110789 = r110776 * r110776;
        double r110790 = 4.0;
        double r110791 = r110782 * r110780;
        double r110792 = r110790 * r110791;
        double r110793 = r110789 - r110792;
        double r110794 = sqrt(r110793);
        double r110795 = r110788 + r110794;
        double r110796 = 2.0;
        double r110797 = r110796 * r110782;
        double r110798 = r110795 / r110797;
        double r110799 = -1.0;
        double r110800 = r110799 * r110781;
        double r110801 = r110787 ? r110798 : r110800;
        double r110802 = r110778 ? r110785 : r110801;
        return r110802;
}

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

Original33.5
Target20.6
Herbie10.0
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \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 < -4.032376794487168e+127

    1. Initial program 53.1

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

      \[\leadsto \color{blue}{1 \cdot \frac{c}{b} - 1 \cdot \frac{b}{a}}\]
    3. Simplified3.1

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

    if -4.032376794487168e+127 < b < 1.1752867948836086e-69

    1. Initial program 12.7

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

    if 1.1752867948836086e-69 < b

    1. Initial program 53.9

      \[\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}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification10.0

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

Reproduce

herbie shell --seed 2020035 
(FPCore (a b c)
  :name "quadp (p42, positive)"
  :precision binary64

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

  (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))