2

私は R でいくつかのシミュレーションを行っていましたが、コードを調べた後、この奇妙な R の動作を発見した後、ちょうど 1 つのシミュレーションが欠落していることに気付きました。

N <- 10000
prop <- 0.9
M <- N * (1 - prop)
print(M)
[1] 1000
print(as.integer(M))
[1] 999
4

1 に答える 1

4

問題は0.9、バイナリ浮動小数点値として正確に表現できないことです。

> sprintf('%.20f', 0.9)
[1] "0.90000000000000002220"

以下のすべての計算では、不正確な結果が得られます。

> sprintf('%.20f', 10000 * (1 - 0.9))
[1] "999.99999999999977262632"
于 2013-04-11T09:59:56.447 に答える