なぜこの出力が異なるのか説明してください。R丸めの説明
round(1.49999999999999)
1
round(1.4999999999999999)
2
私はラウンドのドキュメントを読んでいますが、そこには何も言及していません。 Rはバイナリ形式の数値を表しますが、2つの余分な9を追加すると結果が変わるのはなぜですか?
ありがとうございました。
なぜこの出力が異なるのか説明してください。R丸めの説明
round(1.49999999999999)
1
round(1.4999999999999999)
2
私はラウンドのドキュメントを読んでいますが、そこには何も言及していません。 Rはバイナリ形式の数値を表しますが、2つの余分な9を追加すると結果が変わるのはなぜですか?
ありがとうございました。
1.4999999999999999
が内部的に表現することができないので、それは1.5
に丸められます(彼らは内部的常用数字を使用していない)、この正確な値を持つ数字のこの種を保存しません。
round()
を適用すると、結果は2
になります。
ありがとうございます。Rは時々小数で奇妙な結果を出すことがあります。 – user557240
@ user557240この点でRには特有のものは何もありません。 – joran
これらの2つの数値を変数に入れ、それを印刷すると、それらが異なることがわかります。
コンピュータが
あなたはそれらを印刷する前に 'options(digits = 20)'を設定した方がいいでしょう。**同じように見えるでしょう –
他の回答に記載されているように - 1.4999999999999999は1.5です。同じ結果を得ることはありません! – Hurda
私はこれまでにRを使ったことがないので、これは問題ですが、C/C++などの他の言語では、1.4999999999999999のような数値はfloatまたはdoubleで表されます。
これらは有限精度であるため、正確に1.4999999999999999のような表現はできません。 1.4999999999999999が実際に浮動小数点精度の制限のために1.50000000000000として格納される場合があります。
RはIEEE浮動小数点演算を使用しているため、同じ問題があります。 –
参照[この回答] [1] R. における問題について[1]:http://stackoverflow.com/questions/1535021/whats-the-biggest-r-gotcha-youve- run-across/3398868#3398868 – John