Если я правильно понимаю, вы задаетесь вопросом, когда InputForm будет отображать более 6 цифр. Если это так, то это происходит случайно, когда требуется больше цифр, чтобы «лучше» представить число, полученное после оценки. Поскольку оценка включает в себя явное умножение на 10 ^ (некоторая степень), и поскольку десятичный ввод не должен быть (а в данном случае нет) точным представлением в двоичном коде, вы можете получить небольшие отличия от ожидаемого.
In[26]:= Table[3.12987*10^-j, {j, 10, 25}] // InputForm
Out[26]//InputForm=
{3.12987*^-10,
3.12987*^-11,
3.12987*^-12,
3.12987*^-13,
3.12987*^-14,
3.12987*^-15,
3.12987*^-16,
3.1298700000000004*^-17,
3.1298700000000002*^-18,
3.12987*^-19,
3.12987*^-20,
3.1298699999999995*^-21,
3.1298700000000003*^-22,
3.1298700000000004*^-23,
3.1298700000000002*^-24,
3.1298699999999995*^-25}
Что касается входного синтаксиса * ^, это фактически синтаксическая (фактически лексическая) конструкция. Никакая точная мощность 10 не вычисляется. Создается значение с плавающей запятой, и оно максимально точно в той степени, в которой допускается двоично-десятичное, для вашего ввода. InputForm покажет столько цифр, сколько было использовано при вводе числа, потому что это действительно ближайший десятичный знак к соответствующему двоичному значению, которое было создано.
Когда вы преодолеваете ограничения чисел с плавающей запятой, вы получаете аналог произвольной точности. Это уже не machinePrecision, а фактически $ MachinePrecision (это аналог bignum для машинных операций в Mathematica).
То, что вы видите в InputForm для 3.12987 * ^ - 596 (десятичное число, заканчивающееся серией 9), я полагаю, вызвано внутренним представлением Mathematica, включающим использование защитных битов. Если бы было только 53 бита мантиссы, аналогично машинному двойнику, то ближайшим десятичным представлением были бы ожидаемые шесть цифр.
Даниэль Лихтблау
Wolfram Research