コンピュータ上の実数は近似値である。ただし,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
結論:実数変数がある値と等しいかどうかを判定するようなプログラムを書いてはいけない