我正在尝试使用linspace相等地间隔一个封闭的间隔。我的代码如下:
for i in np.linspace(-1,2,6,endpoint=True):
print(i)
及其下一个输出:
-1.0
-0.4
0.19999999999999996
0.7999999999999998
1.4
2.0
我的问题是,为什么linspace在第三和第四位返回0.19999999999999996
和0.7999999999999998
。据我了解,linspace会将起始值增加一个有理数,从而可以精确地表示所有值。
我是对的还是我完全误解了?感谢您的提前帮助!
答案 0 :(得分:0)
几乎每天使用的float值都不十分精确。这就是float
的本质。但是大多数时候它们都非常接近我们实际认为的值,我们甚至都没有注意到,因为python在打印前会将数字四舍五入。您可以使用decimal
模块查看(至少更精确的)“实际”值:
from decimal import Decimal
for i in np.linspace(-1,2,6,endpoint=True):
print(Decimal(i))
输出:
-1
-0.40000000000000002220446049250313080847263336181640625
0.1999999999999999555910790149937383830547332763671875
0.79999999999999982236431605997495353221893310546875
1.399999999999999911182158029987476766109466552734375
2
如您所见,除了第一个和最后一个值,它们都不是精确的。您注意到的两个值恰好有点不准确。