Average Error: 33.3 → 22.1
Time: 20.3s
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 3.49222195256563 \cdot 10^{-230}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -4, 0\right)}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{a}}{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 3.49222195256563 \cdot 10^{-230}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b}{a}}{2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -4, 0\right)}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{a}}{2}\\

\end{array}
double f(double a, double b, double c) {
        double r1381797 = b;
        double r1381798 = -r1381797;
        double r1381799 = r1381797 * r1381797;
        double r1381800 = 4.0;
        double r1381801 = a;
        double r1381802 = c;
        double r1381803 = r1381801 * r1381802;
        double r1381804 = r1381800 * r1381803;
        double r1381805 = r1381799 - r1381804;
        double r1381806 = sqrt(r1381805);
        double r1381807 = r1381798 + r1381806;
        double r1381808 = 2.0;
        double r1381809 = r1381808 * r1381801;
        double r1381810 = r1381807 / r1381809;
        return r1381810;
}

double f(double a, double b, double c) {
        double r1381811 = b;
        double r1381812 = 3.49222195256563e-230;
        bool r1381813 = r1381811 <= r1381812;
        double r1381814 = a;
        double r1381815 = c;
        double r1381816 = r1381814 * r1381815;
        double r1381817 = -4.0;
        double r1381818 = r1381811 * r1381811;
        double r1381819 = fma(r1381816, r1381817, r1381818);
        double r1381820 = sqrt(r1381819);
        double r1381821 = r1381820 - r1381811;
        double r1381822 = r1381821 / r1381814;
        double r1381823 = 2.0;
        double r1381824 = r1381822 / r1381823;
        double r1381825 = 0.0;
        double r1381826 = fma(r1381816, r1381817, r1381825);
        double r1381827 = r1381811 + r1381820;
        double r1381828 = r1381826 / r1381827;
        double r1381829 = r1381828 / r1381814;
        double r1381830 = r1381829 / r1381823;
        double r1381831 = r1381813 ? r1381824 : r1381830;
        return r1381831;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.3
Target20.5
Herbie22.1
\[\begin{array}{l} \mathbf{if}\;b \lt 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 2 regimes
  2. if b < 3.49222195256563e-230

    1. Initial program 20.8

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

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

    if 3.49222195256563e-230 < b

    1. Initial program 45.9

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied flip--46.0

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

      \[\leadsto \frac{\frac{\frac{\color{blue}{\mathsf{fma}\left(a \cdot c, -4, 0\right)}}{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} + b}}{a}}{2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification22.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le 3.49222195256563 \cdot 10^{-230}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -4, 0\right)}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{a}}{2}\\ \end{array}\]

Reproduce

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

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