Average Error: 34.8 → 10.1
Time: 16.9s
Precision: 64
\[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
\[\begin{array}{l} \mathbf{if}\;b_2 \le -3.680329042988888396603264581948851078331 \cdot 10^{148}:\\ \;\;\;\;\mathsf{fma}\left(\frac{b_2}{a}, -2, \frac{\frac{1}{2} \cdot c}{b_2}\right)\\ \mathbf{elif}\;b_2 \le 4.612990823111230552052602417245542305295 \cdot 10^{-104}:\\ \;\;\;\;\left(\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2\right) \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \end{array}\]
\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}
\begin{array}{l}
\mathbf{if}\;b_2 \le -3.680329042988888396603264581948851078331 \cdot 10^{148}:\\
\;\;\;\;\mathsf{fma}\left(\frac{b_2}{a}, -2, \frac{\frac{1}{2} \cdot c}{b_2}\right)\\

\mathbf{elif}\;b_2 \le 4.612990823111230552052602417245542305295 \cdot 10^{-104}:\\
\;\;\;\;\left(\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2\right) \cdot \frac{1}{a}\\

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

\end{array}
double f(double a, double b_2, double c) {
        double r691109 = b_2;
        double r691110 = -r691109;
        double r691111 = r691109 * r691109;
        double r691112 = a;
        double r691113 = c;
        double r691114 = r691112 * r691113;
        double r691115 = r691111 - r691114;
        double r691116 = sqrt(r691115);
        double r691117 = r691110 + r691116;
        double r691118 = r691117 / r691112;
        return r691118;
}

double f(double a, double b_2, double c) {
        double r691119 = b_2;
        double r691120 = -3.6803290429888884e+148;
        bool r691121 = r691119 <= r691120;
        double r691122 = a;
        double r691123 = r691119 / r691122;
        double r691124 = -2.0;
        double r691125 = 0.5;
        double r691126 = c;
        double r691127 = r691125 * r691126;
        double r691128 = r691127 / r691119;
        double r691129 = fma(r691123, r691124, r691128);
        double r691130 = 4.6129908231112306e-104;
        bool r691131 = r691119 <= r691130;
        double r691132 = r691119 * r691119;
        double r691133 = r691122 * r691126;
        double r691134 = r691132 - r691133;
        double r691135 = sqrt(r691134);
        double r691136 = r691135 - r691119;
        double r691137 = 1.0;
        double r691138 = r691137 / r691122;
        double r691139 = r691136 * r691138;
        double r691140 = -0.5;
        double r691141 = r691126 / r691119;
        double r691142 = r691140 * r691141;
        double r691143 = r691131 ? r691139 : r691142;
        double r691144 = r691121 ? r691129 : r691143;
        return r691144;
}

Error

Bits error versus a

Bits error versus b_2

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b_2 < -3.6803290429888884e+148

    1. Initial program 62.1

      \[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    2. Simplified62.1

      \[\leadsto \color{blue}{\frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{a}}\]
    3. Using strategy rm
    4. Applied div-inv62.1

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

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}}\]
    6. Simplified2.3

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

    if -3.6803290429888884e+148 < b_2 < 4.6129908231112306e-104

    1. Initial program 12.1

      \[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    2. Simplified12.1

      \[\leadsto \color{blue}{\frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{a}}\]
    3. Using strategy rm
    4. Applied div-inv12.3

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

    if 4.6129908231112306e-104 < b_2

    1. Initial program 52.7

      \[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    2. Simplified52.7

      \[\leadsto \color{blue}{\frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{a}}\]
    3. Taylor expanded around inf 9.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -3.680329042988888396603264581948851078331 \cdot 10^{148}:\\ \;\;\;\;\mathsf{fma}\left(\frac{b_2}{a}, -2, \frac{\frac{1}{2} \cdot c}{b_2}\right)\\ \mathbf{elif}\;b_2 \le 4.612990823111230552052602417245542305295 \cdot 10^{-104}:\\ \;\;\;\;\left(\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2\right) \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019170 +o rules:numerics
(FPCore (a b_2 c)
  :name "quad2p (problem 3.2.1, positive)"
  (/ (+ (- b_2) (sqrt (- (* b_2 b_2) (* a c)))) a))