It works perfectly without seeding? I doubt that.
The rand() functions create their "random" numbers based on a "seed" if the "seed" is the same, the generated sequence will be the same.
So to ensure that you get "random" numbers you must make sure the seed is different every time (which is why microtime() is used)