Pass the second parameter:
microtime(true);
Otherwise you get a string instead of a real float value which leads to unexpected/wrong results:
By default, microtime() returns a string in the form "msec sec", where sec is the current time measured in the number of seconds since the Unix epoch (0:00:00 January 1, 1970 GMT), and msec is the number of microseconds that have elapsed since sec expressed in seconds.
(Emphasis mine)
Examples:
microtime(): 0.93146600 1382611111 (string value)
microtime(true): 1382611111.93146600 (float, printed as a string in this case)