Floating point Range给了我一些其他的东西来代替0,为什么?

Floating point Range给了我一些其他的东西来代替0,为什么?,floating-point,range,wolfram-mathematica,numerical-stability,Floating Point,Range,Wolfram Mathematica,Numerical Stability,我想把一些FrameTicks放到Plot中 xticks = Range[-2, 2, 0.2] 得到 {-2., -1.8, -1.6, -1.4, -1.2, -1., -0.8, -0.6, -0.4, -0.2, 1.11022*10^-16, 0.2, 0.4, 0.6, 0.8, 1., 1.2, 1.4, 1.6, 1.8, 2.} 所以这里有一个小数字,而不是零 使用表可获得相同的输出: Table[k, {k, -2, 2, 0.2}] {-2., -1.8, -1.6

我想把一些
FrameTicks
放到
Plot

xticks = Range[-2, 2, 0.2]
得到

{-2., -1.8, -1.6, -1.4, -1.2, -1., -0.8, -0.6, -0.4, -0.2, 
1.11022*10^-16, 0.2, 0.4, 0.6, 0.8, 1., 1.2, 1.4, 1.6, 1.8, 2.}
所以这里有一个小数字,而不是零

使用
可获得相同的输出:

Table[k, {k, -2, 2, 0.2}]
{-2., -1.8, -1.6, -1.4, -1.2, -1., -0.8, -0.6, -0.4, -0.2, 
1.11022*10^-16, 0.2, 0.4, 0.6, 0.8, 1., 1.2, 1.4, 1.6, 1.8, 2.}
但使用
0.25
作为步长值,一切正常:

xticks = Range[-2, 2, 0.25]
{-2., -1.75, -1.5, -1.25, -1., -0.75, -0.5, -0.25, 0., 0.25, 0.5, \
0.75, 1., 1.25, 1.5, 1.75, 2.}
如何替换小数字并将其设置为零?

TL;博士: 考虑使用:

Range[-20, 20, 2]/10
可以选择使用以下命令将其转换为浮点:

N[Range[-20, 20, 2]/10]`

0的实际情况是什么
范围[-2,2,0.2]
使用浮点运算,因此在某个点上它得到了一些
n
,这是
-0.2
的浮点近似值,并添加了
0.2f
:结果不可能是
0
-我们在F域中,它最多可以是
0.
或其他合理接近的近似值(另请参见:)

然而,“合理接近”有多接近

,这可能就是为什么
2.0,1.8,…
看起来不错,但是通过
-0.2f+0.2f
得到的零的近似值很难看的原因

另一方面,
范围[-20,20,2]
适用于自然数,N中的
-2+2
是普通的
0
(固定精度算法几乎没有浮点数那么复杂)

然后
范围[-20,20,2]/10
映射到Q(其中p=0的任何p/Q仍然容易计算为0)


您还可以使用
Chop[Range[-2,2,0.2]]
将浮点值调整到任意精度,谢谢您的详细解释。现在我看到了实域和整数域的区别。“Chop[Range[-2,2,0.2]]适合我,因为我想在我的记号中有数字而不是分数。”edwinbubble很乐意帮忙。点击v-tick图标,您可以随意接受这个答案:),但我不明白为什么0.25可以工作,而0.2不能?这两个数字是同一种,即有理数…不是运气,.25是2的幂,用浮点表示。谢谢你们,现在我明白了。也许我分析过度了,但我只是好奇而已。一旦理解了一个人可以去一个…FWIW Mathematica v9实际上足够聪明来处理这个问题。你们有什么版本?(表和范围都给出了精确的零)。然而,我仍然建议使用@TobiaTesan答案中的方法。