2

基本パッケージに何かまたはバグがありませんか?

私はR-2.15.2、Win7-32​​で実行しています

x %% yモジュラス(x mod y)5%%2は1です

から:http ://www.statmethods.net/management/operators.html


>  1 %% 0.1
[1] 0.1

>  1 %% 0.2
[1] 0.2

両方とも0でなければなりません。

以下の例は期待どおりに機能します。例えば:

1 %% 0.15

0.1(1.0 = 6 x 0.15 + 0.1)である必要があります


>  1 %% 0.11  # expected result 
[1] 0.01

>  1 %% 0.15
[1] 0.1

>  1 %% 0.3
[1] 0.1

>  1 %% 0.4
[1] 0.2

> 1 %% 0.5
[1] 0
4

1 に答える 1

7

まず、x86_64 で動作する R バージョン 2.15.1 を使用してこれを再現できません。

それがあなたの環境で起こっていることである場合、これはほぼ確実に、バイナリ浮動小数点演算を使用して正確に表現することも、表現すること0.1もできないという事実に関係しています。0.2

> sprintf("%.20f", 0.1)
[1] "0.10000000000000000555"
> sprintf("%.20f", 0.2)
[1] "0.20000000000000001110"

のドキュメントに%%は、次のように記載されています。

%%などx %/% yの非整数に使用できますy1 %/% 0.2、結果は表現エラーの影響を受けるため、プラットフォームに依存する場合があります。の IEC 60059 表現は0.2よりわずかに大きい 2 進分数であるため0.2、 に対する答えは と1 %/% 0.2なるはずです4が、ほとんどのプラットフォームでは5.

(R だけでなく) 浮動小数点演算の特性に関係する、他にも多くの同様の落とし穴があります。このテーマに関する古典的な論文はWhat Every Computer Scientist Should Know About Floating-Point Arithmeticです。

于 2013-03-21T11:39:44.307 に答える