pytorch sum()结果为什么不正确

代码

a = torch.tensor([ 1.4609,  1.2124,  0.9508,  0.6755,  0.3857,  0.0806, -0.2406, -0.5786,-0.9344, -1.3090, -1.7033])
b = torch.tensor([0.7001])
c = a * b
print(c)
print(c.sum())

结果

tensor([ 1.0228,  0.8488,  0.6657,  0.4729,  0.2700,  0.0564, -0.1684, -0.4051,-0.6542, -0.9164, -1.1925])
tensor(-2.3842e-07)

为啥会是e-07,这怎么家也不到0.0000000几啊,求大神指点。

这是因为python在表示和进行浮点数运算时,不能准确的表示浮点数,所在运算结果会有表示误差,你的结果刚好是0,所以结果会是一个很小的实数,选用不同的浮点长度结果可能都会不一样。如果对计算要求不是太严格,这种便是误差是不用理会的。如果真的需要一个严格的结果,可以采用如下的方式实现严格的浮点计算:

```from decimal import Decimal

a=[ 1.4609,  1.2124,  0.9508,  0.6755,  0.3857,  0.0806, -0.2406, -0.5786,-0.9344, -1.3090, -1.7033]
a=list(map(str,a))
c=Decimal('0')
for i in a:
    c+=Decimal(i)
print(c)              #这样可以得到一个严格的计算结果

表达式 1.4609+1.2124+0.9508+0.6755+0.3857+0.0806-0.2406-0.5786-0.9344-1.3090-1.7033 = 6.66133814775094e-16
不考虑误差它就是0
https://zh.numberempire.com/expressioncalculator.php

图片说明