Похоже, что на самом деле он вычисляет 1 * 10 * 10 ... * 10
, и ошибки появляются, как только вы выходите за рамки значительного числа битов для базового типа с плавающей запятой.
Но я не верю, что это произойдет для типа float / double типа IEE754, поскольку он вполне может представлять 1x10 полный диапазон без потери точности.
Одна из возможностей заключается в том, что проблема, с которой вы сталкиваетесь, связана со способностью сохранять поплавки с меньшей точностью, чем разрешено (что может привести к искажению вычисления 1e25) - см. Объяснение http://www.uc.edu/sashtml/lrcon/z0695157.htm#z0695187.
Обновление 1:
Хорошо, исходя из вашего комментария, вы не ограничиваете длину. Что дает следующий код?
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;
Основываясь на этом выводе, мы, вероятно, можем сделать вывод, что происходит под одеялом.