gpt4 book ai didi

wolfram-mathematica - Mathematica 内部数字格式和精度

转载 作者:行者123 更新时间:2023-12-04 08:05:31 25 4
gpt4 key购买 nike

this 相切相关问题,数字格式到底发生了什么?

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 内部保存其数字的格式有关,但有没有人知道或愿意冒险进行有根据的猜测,如何?

最佳答案

如果我理解正确,您想知道 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(这是 Mathematica 中机器浮点数的 bignum 模拟)。

我相信,您在 InputForm 中看到的 3.12987*^-596(以 9 为结尾的十进制数)是由 Mathematica 涉及使用保护位的内部表示引起的。如果只有 53 个尾数位,类似于机器 double 数,那么最接近的十进制表示将是预期的六位数字。

丹尼尔·利希布劳
Wolfram 研究

关于wolfram-mathematica - Mathematica 内部数字格式和精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4943706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com