Average Error: 14.8 → 5.8
Time: 2.3s
Precision: binary64
\[\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w\]
\[\begin{array}{l} \mathbf{if}\;\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w = -inf.0 \lor \neg \left(\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w \le -3.0863394663857411 \cdot 10^{-261} \lor \neg \left(\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w \le 5.5686220451728958 \cdot 10^{-247} \lor \neg \left(\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w \le 8.1337808913498459 \cdot 10^{266}\right)\right)\right):\\ \;\;\;\;\left(b \cdot a\right) \cdot \left(x \cdot y - z \cdot w\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w\\ \end{array}\]
\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w
\begin{array}{l}
\mathbf{if}\;\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w = -inf.0 \lor \neg \left(\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w \le -3.0863394663857411 \cdot 10^{-261} \lor \neg \left(\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w \le 5.5686220451728958 \cdot 10^{-247} \lor \neg \left(\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w \le 8.1337808913498459 \cdot 10^{266}\right)\right)\right):\\
\;\;\;\;\left(b \cdot a\right) \cdot \left(x \cdot y - z \cdot w\right)\\

\mathbf{else}:\\
\;\;\;\;\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w\\

\end{array}
double code(double a, double x, double b, double y, double z, double w) {
	return ((double) (((double) (((double) (((double) (a * x)) * b)) * y)) - ((double) (((double) (((double) (a * z)) * b)) * w))));
}
double code(double a, double x, double b, double y, double z, double w) {
	double VAR;
	if (((((double) (((double) (((double) (((double) (a * x)) * b)) * y)) - ((double) (((double) (((double) (a * z)) * b)) * w)))) <= -inf.0) || !((((double) (((double) (((double) (((double) (a * x)) * b)) * y)) - ((double) (((double) (((double) (a * z)) * b)) * w)))) <= -3.086339466385741e-261) || !((((double) (((double) (((double) (((double) (a * x)) * b)) * y)) - ((double) (((double) (((double) (a * z)) * b)) * w)))) <= 5.568622045172896e-247) || !(((double) (((double) (((double) (((double) (a * x)) * b)) * y)) - ((double) (((double) (((double) (a * z)) * b)) * w)))) <= 8.133780891349846e+266))))) {
		VAR = ((double) (((double) (b * a)) * ((double) (((double) (x * y)) - ((double) (z * w))))));
	} else {
		VAR = ((double) (((double) (((double) (((double) (a * x)) * b)) * y)) - ((double) (((double) (((double) (a * z)) * b)) * w))));
	}
	return VAR;
}

Error

Bits error versus a

Bits error versus x

Bits error versus b

Bits error versus y

Bits error versus z

Bits error versus w

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if (- (* (* (* a x) b) y) (* (* (* a z) b) w)) < -inf.0 or -3.0863394663857411e-261 < (- (* (* (* a x) b) y) (* (* (* a z) b) w)) < 5.5686220451728958e-247 or 8.1337808913498459e266 < (- (* (* (* a x) b) y) (* (* (* a z) b) w))

    1. Initial program 35.1

      \[\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w\]
    2. Simplified11.4

      \[\leadsto \color{blue}{\left(b \cdot a\right) \cdot \left(x \cdot y - z \cdot w\right)}\]

    if -inf.0 < (- (* (* (* a x) b) y) (* (* (* a z) b) w)) < -3.0863394663857411e-261 or 5.5686220451728958e-247 < (- (* (* (* a x) b) y) (* (* (* a z) b) w)) < 8.1337808913498459e266

    1. Initial program 2.3

      \[\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w\]
  3. Recombined 2 regimes into one program.
  4. Final simplification5.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w = -inf.0 \lor \neg \left(\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w \le -3.0863394663857411 \cdot 10^{-261} \lor \neg \left(\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w \le 5.5686220451728958 \cdot 10^{-247} \lor \neg \left(\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w \le 8.1337808913498459 \cdot 10^{266}\right)\right)\right):\\ \;\;\;\;\left(b \cdot a\right) \cdot \left(x \cdot y - z \cdot w\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(a \cdot x\right) \cdot b\right) \cdot y - \left(\left(a \cdot z\right) \cdot b\right) \cdot w\\ \end{array}\]

Reproduce

herbie shell --seed 2020153 
(FPCore (a x b y z w)
  :name "(- (* (* (* a x) b) y) (* (* (* a z) b) w))"
  :precision binary64
  (- (* (* (* a x) b) y) (* (* (* a z) b) w)))