2

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すると、同じ出力が得られます。

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;DR:

以下の使用を検討してください。

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]は自然数で動作し-2 + 2Nでは単純です0(固定精度演算は浮動小数点演算ほどトリッキーではありません)。

次に、 QRange[-20, 20, 2]/10にマップします(ここで、p = 0 のp/qは簡単に 0 に評価されます)。

を使用して、フロートを任意の精度に切り刻むこともできますChop[Range[-2, 2, 0.2]]

于 2015-07-26T14:18:24.247 に答える