Python 使用symphy积分sin和cos时,输出必须相同,但cos的积分给出的值为-16阶
当使用symphy积分sin和cos时,输出必须相同,但cos的积分给出的值为-16阶,四舍五入后基本上为0。为什么cos的值这么低,sin的值直接为0 浮点数(基本上是十进制数)的精度有限,有时会导致一些奇怪的事情 例如Python 使用symphy积分sin和cos时,输出必须相同,但cos的积分给出的值为-16阶,python,integration,sympy,Python,Integration,Sympy,当使用symphy积分sin和cos时,输出必须相同,但cos的积分给出的值为-16阶,四舍五入后基本上为0。为什么cos的值这么低,sin的值直接为0 浮点数(基本上是十进制数)的精度有限,有时会导致一些奇怪的事情 例如0.1+0.2将给出0.300000000000000004 在您的示例中,e-16非常小,基本上如您所说为零,但在计算过程中,余弦值可能存在舍入误差,但正弦值恰好不是这样。你可以尝试不同的sin积分范围,可能会发现同样的情况发生。谢谢你的提醒。虽然我需要一个关于计算正弦和余弦
0.1+0.2
将给出0.300000000000000004
在您的示例中,e-16非常小,基本上如您所说为零,但在计算过程中,余弦值可能存在舍入误差,但正弦值恰好不是这样。你可以尝试不同的sin积分范围,可能会发现同样的情况发生。谢谢你的提醒。虽然我需要一个关于计算正弦和余弦之间的差异的更技术性的答案,这个差异与计算这两个函数的差异几乎没有关系。这些函数是由非常了解浮动精度问题并尽其所能缓解这些问题的人编写的。但是您看到的差异是硬件精度的极限,因此取决于数据,而不是代码。谢谢@Boargules原因是
sin
精确到0可能是因为范围与原点对称,并且sin(-x)==-sin(x)
,因此,一边的精度误差正好抵消了另一边的精度误差。小心不要使用math或numpy中的pi,因为它们是浮点。你需要sympy的pi才能得到准确的结果。
i/p: f=(sp.integrate(sp.cos(x),(x,-np.pi,np.pi)))
o/p: 2.44929359829471e-16
i/p: f=(sp.integrate(sp.sin(x),(x,-np.pi,np.pi)))
o/p: 0