+2  A: 

It looks like it might actually be calculating 1 * 10 * 10 ... * 10 and the errors are creeping in as soon as you get beyond the significant number of bits for the underlying float type.

But I don't believe that would happen for an IEE754 type float/double since it's quite able to represent 1x10full-range without loss of precision.

One possibility is that the problem you are having is related to the ability to store floats with less precision than allowed (which could possibly screw up a 1e25 calculation) - see http://www.uc.edu/sashtml/lrcon/z0695157.htm#z0695187 for an explanation.

Update 1:

Okay, so based on your comment, you're not restricting the length. What does the following code give you?

t = 10;
u = 1e1;
put t u;
t = 100;
u = 1e2;
put t u;
t = 1000;
u = 1e3;
put t u;
: : :
t = 10000000000000000000000000;
u = 1e25;
put t u;

Based on that output, we can probably deduce what's going on under the covers.

paxdiablo
I'm not restricting the length of my numerics; they're "length 8" (64 bit) numbers.
Simon Nickerson
I've edited the question to give the values for the other powers of 10.
Simon Nickerson