Matlab和Python中浮点数的区别是什么?

3

我将一些数字从Matlab版本5的“mat”文件中导入到Python中,但它们具有不同的精度。

以下是Python代码:

output_data = numpy.matlab.loadmat( ( path ), mat_dtype=True )

print(output_data)

Python3 output: -0.0030967733388058967-> 20 numbers or digits
Matlab output:  -0.00309677333880590  -> 18  "        "

为什么Python和Matlab会有不同的精度?
3个回答

2

默认情况下,MATLAB和Python/Numpy使用相同的浮点表示,即64位浮点数(双精度)。存储方式由CPU而非程序决定(程序基本上可以在32、64和80位浮点数之间进行选择,在平均PC中,这些是CPU所理解的表示方式)。

您看到的差异是程序选择显示数字的方式。内部表示方式是相同的。

如果您的应用程序关注这些数字之间的差异,那么您的做法是错误的。按定义,浮点计算不精确,您不能指望最后几个数字有意义。


1

这是一个仅包含链接的答案,在SO上我们不认为它是有效的答案。一个答案应该能够独立存在,并包含你的链接所指向的基本信息。你本可以将其作为评论,但请注意,你的链接是关于大整数的,而这与OP的问题不同。 - Thierry Lathuille
抱歉,我不知道。下次会记住的。 :) - kkblue
通常情况下,MATLAB使用双精度浮点数,大约可以期望16位数字的精度。-->我得到了小数点后17位数字。 - Michael
@Michael,它提供大约16位数字的精度并不意味着你不能获得更多的数字... - Mark Rotteveel

0

我注意到Python的行为与其他软件包(包括Matlab、SPSS Modeler和Excel)略有不同。

有时它会提供1-2个额外的小数位。

例如:

In [53]: import numpy

In [54]: numpy.pi
Out[54]: 3.141592653589793

In [55]: numpy.pi * 10000
Out[55]: 31415.926535897932

In [56]: numpy.pi * 100000
Out[56]: 314159.2653589793

In [57]: len(str(numpy.pi))
Out[57]: 17

而其他人则会坚持使用16个“有意义”的数字


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接