-1

重複の可能性:
Rでは、これら2つの違いは何ですか?
Rの浮動小数点の問題?

これは私が作成したコードの一部です。真であるはずの比較がRによって偽として計算されていることにようやく気づいたとき、私は問題を探すのに何日も費やしました。WindowsでR2.14.264ビットを使用しています。これは問題を再現するためのコードです。

concList= c(1.15, 1.15, 1.15 ,1.15 ,1.15 ,1.15 )
concList=concList-0.4
a=sum(concList)
b=length(concList)*0.75
str(a)
str(b)
print(a==b)

最後の印刷は、まったく同じ番号として表示されていてもFALSEになります。これはRの浮動小数点数値表現で問題になる可能性があるので、問題を解決するコードを以下に追加しました。

a=round(a,1)
b=round(b,1)
print(a==b)

私の質問は、もっとエレガントな解決策はありますか?これは報告すべきバグですか?

御時間ありがとうございます。

4

1 に答える 1

5

まったく同じ数ではないからです。浮動小数点エラーとしても知られる、コンピューターによる数値の表現のために、それらは非常にわずかに異なります。

> a - b
[1] -8.881784e-16

Jon Skeetには、この問題に関する優れたブログ投稿があります。このブログ投稿は 定期的にStackOverflowに表示されます。

@mrdwabがコメントで示唆しているように、ほぼall.equal(a, b)等しいかどうかをテストするために使用する必要があります。

于 2012-08-08T17:16:50.290 に答える