Multiplication is "commutative", meaning the order of the operands is not important. x*y === y*x.
Multiplication is not always associative, because of rounding. So (x*y)*z is not always (but usually...) equal to x*(y*z). Note that this property usually does apply to multiplication, but in such cases there's always an infinite allowed number of digits :)
function ApplyMultiplication(left, right) {
// if either operand is NaN, the result is NaN
if (isNaN(left) || isNaN(right)) return NaN;
// sign is positive if both values have same sign, negative otherwise (implicitly implemented)
// infinity times zero equals crap
if ((IsInfinite(left) && right === 0) || (IsInfinite(right) && left === 0)) return NaN;
// infinity times infinity is infinity
if (IsInfinite(left) && IsInfinite(right)) return (Sign(left)==Sign(right)?infinite:-infinite);
// infinite times non-infinite results in infinite
if (IsInfinite(left) != IsInfinite(right)) return (Sign(left)==Sign(right)?infinite:-infinite);
// otherwise, apply * according to the IEEE 754 round-to-nearest mode, or whatever.
return left * right; // could have just done this right from the start ;)
}