Average Error: 33.7 → 8.9
Time: 5.1s
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 -73773484249037.312:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -8.143231117685541 \cdot 10^{-211}:\\ \;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}{2 \cdot a}\\ \mathbf{elif}\;b \le 8.633216037833923 \cdot 10^{65}:\\ \;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \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 -73773484249037.312:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r65647 = b;
        double r65648 = -r65647;
        double r65649 = r65647 * r65647;
        double r65650 = 4.0;
        double r65651 = a;
        double r65652 = c;
        double r65653 = r65651 * r65652;
        double r65654 = r65650 * r65653;
        double r65655 = r65649 - r65654;
        double r65656 = sqrt(r65655);
        double r65657 = r65648 - r65656;
        double r65658 = 2.0;
        double r65659 = r65658 * r65651;
        double r65660 = r65657 / r65659;
        return r65660;
}

double f(double a, double b, double c) {
        double r65661 = b;
        double r65662 = -73773484249037.31;
        bool r65663 = r65661 <= r65662;
        double r65664 = -1.0;
        double r65665 = c;
        double r65666 = r65665 / r65661;
        double r65667 = r65664 * r65666;
        double r65668 = -8.143231117685541e-211;
        bool r65669 = r65661 <= r65668;
        double r65670 = 2.0;
        double r65671 = pow(r65661, r65670);
        double r65672 = r65671 - r65671;
        double r65673 = 4.0;
        double r65674 = a;
        double r65675 = r65674 * r65665;
        double r65676 = r65673 * r65675;
        double r65677 = r65672 + r65676;
        double r65678 = r65661 * r65661;
        double r65679 = r65678 - r65676;
        double r65680 = sqrt(r65679);
        double r65681 = r65680 - r65661;
        double r65682 = r65677 / r65681;
        double r65683 = 2.0;
        double r65684 = r65683 * r65674;
        double r65685 = r65682 / r65684;
        double r65686 = 8.633216037833923e+65;
        bool r65687 = r65661 <= r65686;
        double r65688 = -r65661;
        double r65689 = r65688 - r65680;
        double r65690 = 1.0;
        double r65691 = r65690 / r65684;
        double r65692 = r65689 * r65691;
        double r65693 = 1.0;
        double r65694 = r65661 / r65674;
        double r65695 = r65666 - r65694;
        double r65696 = r65693 * r65695;
        double r65697 = r65687 ? r65692 : r65696;
        double r65698 = r65669 ? r65685 : r65697;
        double r65699 = r65663 ? r65667 : r65698;
        return r65699;
}

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.7
Target21.0
Herbie8.9
\[\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 4 regimes
  2. if b < -73773484249037.31

    1. Initial program 55.9

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

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

    if -73773484249037.31 < b < -8.143231117685541e-211

    1. Initial program 29.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 flip--29.4

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

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

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

    if -8.143231117685541e-211 < b < 8.633216037833923e+65

    1. Initial program 10.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 div-inv10.3

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

    if 8.633216037833923e+65 < b

    1. Initial program 40.1

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -73773484249037.312:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -8.143231117685541 \cdot 10^{-211}:\\ \;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}{2 \cdot a}\\ \mathbf{elif}\;b \le 8.633216037833923 \cdot 10^{65}:\\ \;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020057 
(FPCore (a b c)
  :name "The quadratic formula (r2)"
  :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)))