裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

プログラム書法-2

2012年01月04日 | ブログラミング

コンピュータ上の実数は近似値である。ただし,2 のべき乗数の和で表される数は正確な値を保持している。整数は全て2のべき乗数の和であるから正確な値を保持している。

> options(digits=20)
> x <- 0.001 # 0.001 は 10 進数では正確な値であるが,2 進数では循環小数となり,正確な値を保持していない
> s <- 0
> for (i in 1:1000) s <- s+x
> s
[1] 1.0000000000000006661
> s == 1 # よって,0.001 を 1000 回足しても 1 にはならない
[1] FALSE

> (x <- 2^(-10)) # 2 の マイナス 10 乗は 10 進数でも,2 進数でも正確な値を保持している
[1] 0.0009765625
> s <- 0
> for (i in 1:1024) s <- s+x
> s
[1] 1
> s == 1 # 1024 回加えると,正確に 1 になる
[1] TRUE

結論:実数変数がある値と等しいかどうかを判定するようなプログラムを書いてはいけない

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« R 用の indent その3 | トップ | プログラム書法-3 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事