Average Error: 33.7 → 9.8
Time: 8.7s
Precision: binary64
\[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a} \]
\[\begin{array}{l} \mathbf{if}\;b_2 \leq -5.667728209619793 \cdot 10^{+72}:\\ \;\;\;\;\frac{\mathsf{fma}\left(0.5, \frac{c}{b_2} \cdot a, b_2 \cdot -2\right)}{a}\\ \mathbf{elif}\;b_2 \leq 4.1451903108450355 \cdot 10^{-85}:\\ \;\;\;\;\frac{\sqrt{b_2 \cdot b_2 - c \cdot a} - b_2}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b_2} \cdot -0.5\\ \end{array} \]
\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}
\begin{array}{l}
\mathbf{if}\;b_2 \leq -5.667728209619793 \cdot 10^{+72}:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.5, \frac{c}{b_2} \cdot a, b_2 \cdot -2\right)}{a}\\

\mathbf{elif}\;b_2 \leq 4.1451903108450355 \cdot 10^{-85}:\\
\;\;\;\;\frac{\sqrt{b_2 \cdot b_2 - c \cdot a} - b_2}{a}\\

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


\end{array}
(FPCore (a b_2 c)
 :precision binary64
 (/ (+ (- b_2) (sqrt (- (* b_2 b_2) (* a c)))) a))
(FPCore (a b_2 c)
 :precision binary64
 (if (<= b_2 -5.667728209619793e+72)
   (/ (fma 0.5 (* (/ c b_2) a) (* b_2 -2.0)) a)
   (if (<= b_2 4.1451903108450355e-85)
     (/ (- (sqrt (- (* b_2 b_2) (* c a))) b_2) a)
     (* (/ c b_2) -0.5))))
double code(double a, double b_2, double c) {
	return (-b_2 + sqrt((b_2 * b_2) - (a * c))) / a;
}
double code(double a, double b_2, double c) {
	double tmp;
	if (b_2 <= -5.667728209619793e+72) {
		tmp = fma(0.5, ((c / b_2) * a), (b_2 * -2.0)) / a;
	} else if (b_2 <= 4.1451903108450355e-85) {
		tmp = (sqrt((b_2 * b_2) - (c * a)) - b_2) / a;
	} else {
		tmp = (c / b_2) * -0.5;
	}
	return tmp;
}

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 < -5.6677282096197926e72

    1. Initial program 41.0

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

      \[\leadsto \color{blue}{\frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{a}} \]
    3. Applied *-un-lft-identity_binary6441.0

      \[\leadsto \frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{\color{blue}{1 \cdot a}} \]
    4. Applied associate-/r*_binary6441.0

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{1}}{a}} \]
    5. Simplified34.0

      \[\leadsto \frac{\color{blue}{\mathsf{hypot}\left(\sqrt{-c \cdot a}, b_2\right) - b_2}}{a} \]
    6. Taylor expanded in b_2 around -inf 35.1

      \[\leadsto \frac{\color{blue}{-\left(0.5 \cdot \frac{{\left(\sqrt{-c \cdot a}\right)}^{2}}{b_2} + 2 \cdot b_2\right)}}{a} \]
    7. Simplified4.8

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

    if -5.6677282096197926e72 < b_2 < 4.1451903108450355e-85

    1. Initial program 12.7

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

      \[\leadsto \color{blue}{\frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{a}} \]
    3. Applied *-un-lft-identity_binary6412.7

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

    if 4.1451903108450355e-85 < 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 in b_2 around inf 8.8

      \[\leadsto \color{blue}{-0.5 \cdot \frac{c}{b_2}} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification9.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \leq -5.667728209619793 \cdot 10^{+72}:\\ \;\;\;\;\frac{\mathsf{fma}\left(0.5, \frac{c}{b_2} \cdot a, b_2 \cdot -2\right)}{a}\\ \mathbf{elif}\;b_2 \leq 4.1451903108450355 \cdot 10^{-85}:\\ \;\;\;\;\frac{\sqrt{b_2 \cdot b_2 - c \cdot a} - b_2}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b_2} \cdot -0.5\\ \end{array} \]

Reproduce

herbie shell --seed 2022088 
(FPCore (a b_2 c)
  :name "quad2p (problem 3.2.1, positive)"
  :precision binary64
  (/ (+ (- b_2) (sqrt (- (* b_2 b_2) (* a c)))) a))