python数学,numpy模块不同的结果?

hat*_*rix 4 python floating-point numpy

计算一个值的余弦会得到略微不同的结果.如何检查这种差异是否在机器精度范围内?

import math
math.cos(60.0/180.0*math.pi)
-> 0.5000000000000001

import numpy
numpy.cos(60.0/180.0*numpy.pi)
-> 0.50000000000000011
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 10

差异似乎只是由格式化例程引起的:

>>> '%.30f' % math.cos(60./180.*math.pi)
'0.500000000000000111022302462516'
>>> '%.30f' % np.cos(60./180.*np.pi)
'0.500000000000000111022302462516'
Run Code Online (Sandbox Code Playgroud)

请注意,默认情况下np.cos返回np.float64而不是float,显然该类型的打印方式不同.在通用硬件上,它们都实现为64位double,因此精度没有实际差异.


Dav*_*nan 5

双精度算术为您提供 15-16 位十进制有效数字的精度。这两个值符合该精度。这里没什么好担心的。

请注意,我说十进制是为了与双精度值的二进制表示中用于有效的 53 个二进制位形成对比。