2

我错过了基本包中的东西或错误吗?

我在R-2.15.2 上运行,在 Win 7-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可以用于非整数y,例如1 %/% 0.2,但结果会受到表示错误的影响,因此可能取决于平台。因为 IEC 60059 的表示0.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 回答