My understanding is that, when machine-precision numbers are used, Mathematica follows the IEEE-754 standard, hence results should be identical to other IEEE-754 compliant software+hardware combinations when the +, -, *, /, operations are used.
Well, I am aware of the fact that floating point arithmetics can be tricky and that systems that do follow the IEEE-754 standard may give different results, but it seems to me it should not be the case here.
More precisely, my understanding is that, given any one of these arithmetic operations, the machine number provided as the result should be the machine number closest to the exact result (for the default rounding mode).
I believe I show below a case where this is not true in Mathematica. NB: the tests have been done for Mathematica versions 7.0 and 8.0 on two different GNU/Linux machines. This is for the division of two numbers, 'num' and 'den' (for 'numerator' and 'denominator').
(* Infinite precision versions of the numbers: *) numInfPrec=2^^11100011010111111010100100110001100111111111111101111*2^-3; denInfPrec=2^^11100011010111111010100100110001100111111111111110111*2^-3;
(* Transform to machine-precision numbers: *) num=1.*numInfPrec; den=1.*denInfPrec;
(* The strings of 0s and 1s above start with a '1' and are 53-digit long, hence the above numbers correspond to regular normalized numbers of the 64-bit long IEEE-754 format -- indeed, the outputs of RealDigits[num,2] and RealDigits[den,2] are consistent with the above numbers. *)
res=num/den; (* Actual computation under testing *)
I contend that is this not the machine number closest to the exact result and that, instead, 1.1111111111111111111111111111111111111111111111110111 * 2^-1 is the closest number, called below "presumablyClosestInfPrec" for its infinite precision version; this number differs from the Mathematica number above by the last binary digit of the mantissa -- it is the next machine number.
(* Infinite precision number corresponding to the result, res: *) resInfPrec=FromDigits[bin,2];
num and den are the same for Mathematica and Matlab, while res=num/den differ.
I have also checked that
(*) the 52+1 binary representations of num and den obtained with Matlab and Octave (with decimal-to-binary converters), and GNU Fortran (with the b64.64 format), are identical to the binary reresentations given by Mathematica;
(*) the 52+1 binaray representations of 'res' obtained with Matlab, Octave, and GNU Fortran, are all identical to the representation of what I refer above by the "closest machine number".
Hopefully, if Mathematica is not faulty here, someone can point out the mistake I am making.