Mathematica 精度不同于其他计算器
Mathematica precision differs from other calculators
如果我在 Mathematica 12 中评估以下输入:
SetPrecision[DecimalForm[123.432654/54.1122356, 130], 130]
结果是:
2.2810488724291406725797060062177479267120361328125000000000000000000000000000000000000000000000000000000000000000000000000000000000
当我运行在其他计算器中进行相同的计算时,直到Mathematica结果的第15位结果都相等:2,281048872429140。然而,从第 16 位开始,其他计算器显示相同的结果,而 Mathematica 显示不同的结果:
Windows 计算器:
2,281048872429140591633586101550
https://keisan.casio.com/calculator:
2.281048872429140591633586101550[.....]
https://www.mathsisfun.com/calculator-precision.html:
2.281048872429140591633586101550[.....]
数学:
2.281048872429140672579706006217[.....].
为什么(仅)Mathematica 以不同的结果结束?
Mathematica 能否以某种方式得出与其他计算器相同的结果(假设这些一致的结果是正确的)?
其他计算器似乎假设输入数字的精度是无限的。 WL 没有。您可以指定输入数字的精度,例如
123.432654`30/54.1122356`30
2.28104887242914059163358610155
Mathematica 的近似十进制数模型与几乎所有其他人的近似十进制数模型不同。
由于您为每个 123.432654
和 54.1122356
提供的位数,这些数字被假定为并被视为 MachinePrecision
数字。这意味着它们具有通常的“大约 16 位精度,由您计算机中的 CPU 浮点硬件提供,但它比这稍微复杂一点。
由于优先规则 Mathematica 首先评估每个数字并将它们转换为内部浮点形式,具有有限的精度和带来的所有问题以及能够在硬件中执行计算的所有速度而不是软件。
然后它使用内部浮点硬件进行除法,得到另一个 MachinePrecision
精度只有大约 16 位的数字。
然后使用 DecimalForm
,您要求 Mathematica 将只有大约 16 个正确数字的结果外推到 130 位显示中。
*Form 函数的所有或几乎所有在黑暗角落的一些非常微妙的东西旨在并且仅用于产生可以显示而不用于进一步计算的东西。例如,新用户通常执行 m=MatrixForm[mymatrix]
以查看矩阵的漂亮格式,然后继续尝试使用 m
进行计算,但失败了。
然后您要求 Mathematica 在该显示器上执行 SetPrecision
函数以尝试将其转换为 130 位精度的数字。我什至猜不出它在内部到底做了什么。
如果我在 Mathematica 12 中评估以下输入:
SetPrecision[DecimalForm[123.432654/54.1122356, 130], 130]
结果是:
2.2810488724291406725797060062177479267120361328125000000000000000000000000000000000000000000000000000000000000000000000000000000000
当我运行在其他计算器中进行相同的计算时,直到Mathematica结果的第15位结果都相等:2,281048872429140。然而,从第 16 位开始,其他计算器显示相同的结果,而 Mathematica 显示不同的结果:
Windows 计算器: 2,281048872429140591633586101550
https://keisan.casio.com/calculator: 2.281048872429140591633586101550[.....]
https://www.mathsisfun.com/calculator-precision.html: 2.281048872429140591633586101550[.....]
数学: 2.281048872429140672579706006217[.....].
为什么(仅)Mathematica 以不同的结果结束?
Mathematica 能否以某种方式得出与其他计算器相同的结果(假设这些一致的结果是正确的)?
其他计算器似乎假设输入数字的精度是无限的。 WL 没有。您可以指定输入数字的精度,例如
123.432654`30/54.1122356`30
2.28104887242914059163358610155
Mathematica 的近似十进制数模型与几乎所有其他人的近似十进制数模型不同。
由于您为每个 123.432654
和 54.1122356
提供的位数,这些数字被假定为并被视为 MachinePrecision
数字。这意味着它们具有通常的“大约 16 位精度,由您计算机中的 CPU 浮点硬件提供,但它比这稍微复杂一点。
由于优先规则 Mathematica 首先评估每个数字并将它们转换为内部浮点形式,具有有限的精度和带来的所有问题以及能够在硬件中执行计算的所有速度而不是软件。
然后它使用内部浮点硬件进行除法,得到另一个 MachinePrecision
精度只有大约 16 位的数字。
然后使用 DecimalForm
,您要求 Mathematica 将只有大约 16 个正确数字的结果外推到 130 位显示中。
*Form 函数的所有或几乎所有在黑暗角落的一些非常微妙的东西旨在并且仅用于产生可以显示而不用于进一步计算的东西。例如,新用户通常执行 m=MatrixForm[mymatrix]
以查看矩阵的漂亮格式,然后继续尝试使用 m
进行计算,但失败了。
然后您要求 Mathematica 在该显示器上执行 SetPrecision
函数以尝试将其转换为 130 位精度的数字。我什至猜不出它在内部到底做了什么。