Your first assumption was correct: it's a CPU problem.
A CPU stores numbers in binary representation. Converting binary to decimal, or vice versa, causes rounding errors depending on the precision the number is stored in. In case of var it's only 10 bits after the decimal.
http://en.wikipedia.org/wiki/Binary_numeral_systemhttp://manual.conitec.net/aarray.htm