Average Error: 34.4 → 10.3
Time: 19.7s
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 -1.763315479739403460017265344144602342789 \cdot 10^{89}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-2, \frac{b}{a}, \frac{c \cdot 2}{b}\right)}{2}\\ \mathbf{elif}\;b \le 9.136492990928292133394320076175633285536 \cdot 10^{-23}:\\ \;\;\;\;\frac{\frac{1}{a} \cdot \left(\sqrt{b \cdot b - c \cdot \left(a \cdot 4\right)} - b\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{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 -1.763315479739403460017265344144602342789 \cdot 10^{89}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-2, \frac{b}{a}, \frac{c \cdot 2}{b}\right)}{2}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r3941629 = b;
        double r3941630 = -r3941629;
        double r3941631 = r3941629 * r3941629;
        double r3941632 = 4.0;
        double r3941633 = a;
        double r3941634 = c;
        double r3941635 = r3941633 * r3941634;
        double r3941636 = r3941632 * r3941635;
        double r3941637 = r3941631 - r3941636;
        double r3941638 = sqrt(r3941637);
        double r3941639 = r3941630 + r3941638;
        double r3941640 = 2.0;
        double r3941641 = r3941640 * r3941633;
        double r3941642 = r3941639 / r3941641;
        return r3941642;
}

double f(double a, double b, double c) {
        double r3941643 = b;
        double r3941644 = -1.7633154797394035e+89;
        bool r3941645 = r3941643 <= r3941644;
        double r3941646 = -2.0;
        double r3941647 = a;
        double r3941648 = r3941643 / r3941647;
        double r3941649 = c;
        double r3941650 = 2.0;
        double r3941651 = r3941649 * r3941650;
        double r3941652 = r3941651 / r3941643;
        double r3941653 = fma(r3941646, r3941648, r3941652);
        double r3941654 = r3941653 / r3941650;
        double r3941655 = 9.136492990928292e-23;
        bool r3941656 = r3941643 <= r3941655;
        double r3941657 = 1.0;
        double r3941658 = r3941657 / r3941647;
        double r3941659 = r3941643 * r3941643;
        double r3941660 = 4.0;
        double r3941661 = r3941647 * r3941660;
        double r3941662 = r3941649 * r3941661;
        double r3941663 = r3941659 - r3941662;
        double r3941664 = sqrt(r3941663);
        double r3941665 = r3941664 - r3941643;
        double r3941666 = r3941658 * r3941665;
        double r3941667 = r3941666 / r3941650;
        double r3941668 = -2.0;
        double r3941669 = r3941649 / r3941643;
        double r3941670 = r3941668 * r3941669;
        double r3941671 = r3941670 / r3941650;
        double r3941672 = r3941656 ? r3941667 : r3941671;
        double r3941673 = r3941645 ? r3941654 : r3941672;
        return r3941673;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original34.4
Target21.3
Herbie10.3
\[\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 < -1.7633154797394035e+89

    1. Initial program 45.7

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied div-inv45.8

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

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

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

    if -1.7633154797394035e+89 < b < 9.136492990928292e-23

    1. Initial program 15.0

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied div-inv15.2

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

    if 9.136492990928292e-23 < b

    1. Initial program 55.4

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{a}}{2}}\]
    3. Taylor expanded around inf 6.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.763315479739403460017265344144602342789 \cdot 10^{89}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-2, \frac{b}{a}, \frac{c \cdot 2}{b}\right)}{2}\\ \mathbf{elif}\;b \le 9.136492990928292133394320076175633285536 \cdot 10^{-23}:\\ \;\;\;\;\frac{\frac{1}{a} \cdot \left(\sqrt{b \cdot b - c \cdot \left(a \cdot 4\right)} - b\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019172 +o rules:numerics
(FPCore (a b c)
  :name "quadp (p42, positive)"

  :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)))