Average Error: 39.5 → 22.4
Time: 2.0s
Precision: binary64
\[\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3}\]
\[\begin{array}{l} \mathbf{if}\;\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3} \le 2.6700920132462433 \cdot 10^{-124} \lor \neg \left(\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3} \le 1.88286256702668593 \cdot 10^{247}\right):\\ \;\;\;\;\frac{a0 \cdot \left(a1 \cdot a4 - a2 \cdot a3\right)}{a2 \cdot a2 - a1 \cdot a3} + a1 \cdot 1\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3}\\ \end{array}\]
\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3}
\begin{array}{l}
\mathbf{if}\;\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3} \le 2.6700920132462433 \cdot 10^{-124} \lor \neg \left(\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3} \le 1.88286256702668593 \cdot 10^{247}\right):\\
\;\;\;\;\frac{a0 \cdot \left(a1 \cdot a4 - a2 \cdot a3\right)}{a2 \cdot a2 - a1 \cdot a3} + a1 \cdot 1\\

\mathbf{else}:\\
\;\;\;\;\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3}\\

\end{array}
double code(double a1, double a2, double a3, double a0, double a4) {
	return ((double) (((double) (((double) (((double) (((double) (((double) (a1 * a2)) * a2)) - ((double) (((double) (a1 * a1)) * a3)))) + ((double) (((double) (a0 * a1)) * a4)))) - ((double) (((double) (a0 * a2)) * a3)))) / ((double) (((double) (a2 * a2)) - ((double) (a1 * a3))))));
}
double code(double a1, double a2, double a3, double a0, double a4) {
	double VAR;
	if (((((double) (((double) (((double) (((double) (((double) (((double) (a1 * a2)) * a2)) - ((double) (((double) (a1 * a1)) * a3)))) + ((double) (((double) (a0 * a1)) * a4)))) - ((double) (((double) (a0 * a2)) * a3)))) / ((double) (((double) (a2 * a2)) - ((double) (a1 * a3)))))) <= 2.6700920132462433e-124) || !(((double) (((double) (((double) (((double) (((double) (((double) (a1 * a2)) * a2)) - ((double) (((double) (a1 * a1)) * a3)))) + ((double) (((double) (a0 * a1)) * a4)))) - ((double) (((double) (a0 * a2)) * a3)))) / ((double) (((double) (a2 * a2)) - ((double) (a1 * a3)))))) <= 1.882862567026686e+247))) {
		VAR = ((double) (((double) (((double) (a0 * ((double) (((double) (a1 * a4)) - ((double) (a2 * a3)))))) / ((double) (((double) (a2 * a2)) - ((double) (a1 * a3)))))) + ((double) (a1 * 1.0))));
	} else {
		VAR = ((double) (((double) (((double) (((double) (((double) (((double) (a1 * a2)) * a2)) - ((double) (((double) (a1 * a1)) * a3)))) + ((double) (((double) (a0 * a1)) * a4)))) - ((double) (((double) (a0 * a2)) * a3)))) / ((double) (((double) (a2 * a2)) - ((double) (a1 * a3))))));
	}
	return VAR;
}

Error

Bits error versus a1

Bits error versus a2

Bits error versus a3

Bits error versus a0

Bits error versus a4

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if (/ (- (+ (- (* (* a1 a2) a2) (* (* a1 a1) a3)) (* (* a0 a1) a4)) (* (* a0 a2) a3)) (- (* a2 a2) (* a1 a3))) < 2.6700920132462433e-124 or 1.88286256702668593e247 < (/ (- (+ (- (* (* a1 a2) a2) (* (* a1 a1) a3)) (* (* a0 a1) a4)) (* (* a0 a2) a3)) (- (* a2 a2) (* a1 a3)))

    1. Initial program 46.9

      \[\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3}\]
    2. Simplified26.5

      \[\leadsto \color{blue}{\frac{a0 \cdot \left(a1 \cdot a4 - a2 \cdot a3\right)}{a2 \cdot a2 - a1 \cdot a3} + a1 \cdot 1}\]

    if 2.6700920132462433e-124 < (/ (- (+ (- (* (* a1 a2) a2) (* (* a1 a1) a3)) (* (* a0 a1) a4)) (* (* a0 a2) a3)) (- (* a2 a2) (* a1 a3))) < 1.88286256702668593e247

    1. Initial program 0.7

      \[\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification22.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3} \le 2.6700920132462433 \cdot 10^{-124} \lor \neg \left(\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3} \le 1.88286256702668593 \cdot 10^{247}\right):\\ \;\;\;\;\frac{a0 \cdot \left(a1 \cdot a4 - a2 \cdot a3\right)}{a2 \cdot a2 - a1 \cdot a3} + a1 \cdot 1\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\left(\left(a1 \cdot a2\right) \cdot a2 - \left(a1 \cdot a1\right) \cdot a3\right) + \left(a0 \cdot a1\right) \cdot a4\right) - \left(a0 \cdot a2\right) \cdot a3}{a2 \cdot a2 - a1 \cdot a3}\\ \end{array}\]

Reproduce

herbie shell --seed 2020153 
(FPCore (a1 a2 a3 a0 a4)
  :name "(/ (- (+ (- (* (* a1 a2) a2) (* (* a1 a1) a3)) (* (* a0 a1) a4)) (* (* a0 a2) a3)) (- (* a2 a2) (* a1 a3)))"
  :precision binary64
  (/ (- (+ (- (* (* a1 a2) a2) (* (* a1 a1) a3)) (* (* a0 a1) a4)) (* (* a0 a2) a3)) (- (* a2 a2) (* a1 a3))))