2011-10-28 2 views
5

なぜこの出力が異なるのか説明してください。R丸めの説明

round(1.49999999999999) 
1 


round(1.4999999999999999) 
2 

私はラウンドのドキュメントを読んでいますが、そこには何も言及していません。 Rはバイナリ形式の数値を表しますが、2つの余分な9を追加すると結果が変わるのはなぜですか?

ありがとうございました。

+0

参照[この回答] [1] R. における問題について[1]:http://stackoverflow.com/questions/1535021/whats-the-biggest-r-gotcha-youve- run-across/3398868#3398868 – John

答えて

7

1.4999999999999999が内部的に表現することができないので、それは1.5に丸められます(彼らは内部的常用数字を使用していない)、この正確な値を持つ数字のこの種を保存しません。

round()を適用すると、結果は2になります。

+0

ありがとうございます。Rは時々小数で奇妙な結果を出すことがあります。 – user557240

+5

@ user557240この点でRには特有のものは何もありません。 – joran

2

これらの2つの数値を変数に入れ、それを印刷すると、それらが異なることがわかります。

コンピュータが

+1

あなたはそれらを印刷する前に 'options(digits = 20)'を設定した方がいいでしょう。**同じように見えるでしょう –

+0

他の回答に記載されているように - 1.4999999999999999は1.5です。同じ結果を得ることはありません! – Hurda

2

私はこれまでにRを使ったことがないので、これは問題ですが、C/C++などの他の言語では、1.4999999999999999のような数値はfloatまたはdoubleで表されます。

これらは有限精度であるため、正確に1.4999999999999999のような表現はできません。 1.4999999999999999が実際に浮動小数点精度の制限のために1.50000000000000として格納される場合があります。

+1

RはIEEE浮動小数点演算を使用しているため、同じ問題があります。 –