Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica Mathematica精度不同于其他计算器_Wolfram Mathematica_Precision - Fatal编程技术网

Wolfram mathematica Mathematica精度不同于其他计算器

Wolfram mathematica Mathematica精度不同于其他计算器,wolfram-mathematica,precision,Wolfram Mathematica,Precision,如果我在Mathematica 12中评估以下输入: SetPrecision[DecimalForm[123.432654/54.1122356, 130], 130] 结果是: 2.2810488724291406725797060062177479267120361328125000000000000000000000000000000000000000000000000000000000000000000000000000000000 当我在其他计算器中运行相同的计算时,结果是相等的

如果我在Mathematica 12中评估以下输入:

SetPrecision[DecimalForm[123.432654/54.1122356, 130], 130]
结果是:

2.2810488724291406725797060062177479267120361328125000000000000000000000000000000000000000000000000000000000000000000000000000000000
当我在其他计算器中运行相同的计算时,结果是相等的,直到Mathematica结果的第15位:2281048872429140。但是,从第16位开始,其他计算器显示相同的结果,而Mathematica显示不同的结果:

Windows计算器: 2281048872429140591633586101550

: 2.281048872429140591633586101550

: 2.281048872429140591633586101550

Mathematica: 2.281048872429140672579706006217

为什么(只有)Mathematica会得到不同的结果


Mathematica能否以某种方式得到与其他计算器相同的结果(假设这些一致的结果是正确的)?

似乎其他计算器假定输入数字的精度是无限的。WL没有。您可以指定输入的数字的精度,例如:

123.432654`30/54.1122356`30

2.28104887242914059163358610155

Mathematica的近似十进制数模型不同于几乎所有其他人的近似十进制数模型

由于您为
123.432654
54.1122356
中的每一个提供的位数,这些数字被假定为并视为
机器精度
数字。这意味着它们通常具有“由计算机中的CPU浮点硬件提供的大约16位精度,但比这稍微复杂一些”

由于优先规则,Mathematica首先计算这些数字中的每一个,并将它们转换为内部浮点形式,精度有限,带来的所有问题以及能够用硬件而不是软件执行计算的所有速度

然后,它使用内部浮点硬件进行除法,从而产生另一个
机器精度
数字,精度只有大约16位

然后使用
DecimalForm
让Mathematica将只有16个好数字的结果外推到130位的显示器上

所有或几乎所有的*Form函数都有一些非常微妙的东西在暗处,它们的目的是并且只用于生成一些可以显示的东西,而不用于进一步的计算。例如,新用户通常使用
m=MatrixForm[mymatrix]
查看矩阵的格式,然后继续尝试使用
m
进行计算,但失败


然后你让Mathematica在显示器上执行
SetPrecision
功能,试图将其转换为130位精度的数字。我甚至猜不出这在内部究竟起了什么作用。

比尔,谢谢你的补充解释!