По прямой связи с этим вопросом, что именно здесь происходит с форматированием чисел?
In[1] := InputForm @ 3.12987*10^-270
Out[1] := 3.12987`*^-270
In[2] := InputForm @ 3.12987*10^-271
Out[2] := 3.1298700000000003`*^-271
Если вы используете * 10. ^
в качестве множителя, переход будет там, где вы наивно ожидали, что это будет:
In[3] := InputForm @ 3.12987*10.^-16
Out[3] := 3.12987`*^-16
In[4] := InputForm @ 3.12987*10.^-17
Out[4] := 3.1298700000000004`*^-17
тогда как * ^
продвигает переход немного дальше, хотя именно машинная точность начинает падать:
In[5] := InputForm @ 3.12987*^-308
Out[5] := 3.12987`*^-308
In[6] := InputForm @ 3.12987*10.^-309
Out[6] := 3.12987`15.954589770191008*^-309
База начинает разрушаться намного позже
In[7] := InputForm @ 3.12987*^-595
Out[7] := 3.12987`15.954589770191005*^-595
In[8] := InputForm @ 3.12987*^-596
Out[8] := 3.1298699999999999999999999999999999999999`15.954589770191005*^-596
Я предполагаю, что эти переходы относятся к формату, в котором система Mathematica хранит свои числа внутри, но знает ли кто-нибудь или хочет рискнуть обоснованным предположением, как?