I made up a testbed program, as well. It has an array of about 50 numbers in total, which include at least one number from each power of 10:
1
12
101
9999
10000
up to 1234567890
and about 1/3rd of them are negative.
Before the timed run, the program (which is made into a function), runs this test. Every number is tested for accuracy with the string generated by the function. Then the timed run begins and these numbers, are chosen randomly for input.
I had to alter iMalc's first program, but it now works fine, and is still 3 X as fast as the next fastest program (but several programs have not been tested yet). I shortened the test quantity to 10 million numbers, to save time, but still give a good spread.