2

我想把一些FrameTicksPlot

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给出相同的输出:

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.}

如何替换小数并将其设置为零?

4

1 回答 1

2

TL;博士:

考虑使用:

Range[-20, 20, 2]/10

可选地将它们转换为浮点数:

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

实际发生了什么0

Range[-2, 2, 0.2]使用浮点算术,所以在某些时候它会得到一些n浮点近似值-0.2并添加0.2f:结果不可能是0- 我们在域F中- 它最多可以是0.或其他一些相当接近的近似值(参见也:之间的区别0.0)。

但是,“合理接近”有多接近?

非常接近的值之间的浮点减法是出了名的棘手这可能就是为什么2.0, 1.8, ...看起来不错,但由 获得的零近似值-0.2f + 0.2f丑陋的。

另一方面,Range[-20, 20, 2]使用自然数和N-2 + 2是简单的(固定精度算术并不像浮点那么棘手)。0

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

您还可以使用Chop[Range[-2, 2, 0.2]].

于 2015-07-26T14:18:24.247 回答