小编Tur*_*912的帖子

纠正R模数误差的最佳方法是什么?

核心R引擎有一个严重的缺陷,它表达了Modulus操作的输出:

ceiling((1.99 %% 1) * 100)

返回:99(正确)

ceiling((2.99 %% 1) * 100)

返回:100(不正确)

该行为将显示在任何整数值N + 2.99(例如3.99等)中.如果这与浮点表示相关联,则系统不会表达差异的完整细节.这尤其令人不安,因为:

两者(1.99 %% 1)并且(2.99 %% 1) 似乎返回0.99.

两者((1.99 %% 1) * 100)并且((2.99 %% 1) * 100) 似乎返回99.

但是,如果进行任何舍入或类似的数学运算,则2.99 的不可见残值会以意外的方式翻转.

虽然为我当前的应用程序解决这个问题是微不足道的:

floor((2.99 - floor(2.99)) * 100)

返回:99(正确)

sprintf("%.22f", floor((2.99 - floor(2.99)) * 100))

返回:99.0000000000000000000000(正确)

...我想知道有多少其他实例Modulus返回坏值而没有底层细节来显示浮点delta.有没有办法揭露模数似乎附加的基础残值?它是不可见的.

编辑:根据下面的andrew.punnett的慷慨示例,print(1.99, digits = 22)返回1.99(没有浮动扩展),而print(1.99 %% 1, digits = 22)返回0.98999999999999999.根据Aaron的敏锐眼光,这似乎与版本和/或系统有关.

谢谢!

r modulus

4
推荐指数
1
解决办法
164
查看次数

标签 统计

modulus ×1

r ×1