トップ 一覧 検索 ヘルプ RSS ログイン 印刷

浮動小数点の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!浮動小数点に注意

Rに限らずExcelなどでも言えることだが、一見して丸く見える数字も浮動小数点によって誤差を持っている。

たとえば、

 > print(3/10, digits=20)
 [1] 0.2999999999999999889

 > print(0.4, digits=20)
 [1] 0.4000000000000000222


のように。

つまり、実数型を扱う場合には完全に一致するかどうかはFALSEが返ってくる可能性が高い。

このようなとき、signif()を使うとdigits=で指定した小数点位で丸める。

 > signif(1.23456789, digits=7)
 [1] 1.234568

round()との挙動の違いに注意。round()は小数点、signif()は整数を含む上からの桁数。

 > signif(1.23456789, digits=6)
 [1] 1.23457
 > round(1.23456789, digits=6)
 [1] 1.234568
 
! fpCompareパッケージを使う

比較演算子%==%を用いると、浮動小数点同士を比較した結果が返される。

 > (0.1+0.2) == 0.3
 [1] FALSE
 > (0.1+0.2) %==% 0.3
 [1] TRUE
 

* https://www.karada-good.net/analyticsr/r-233/