R中的圆函数是否有错误?

时间:2016-10-06 10:00:20

标签: r rounding

圆函数似乎有错误。下面我希望它返回6,但它返回5.

round(5.5) 
# 5

其他5.5,例如6.5,4.5会像我们预期的那样返回7,5。

有任何解释吗?

2 个答案:

答案 0 :(得分:7)

?round函数的帮助文件中解释了此行为:

  

请注意,对于舍入5,预计IEC 60559标准   使用,'去偶数'。因此round(0.5)是0和   round(-1.5)是-2。但是,这取决于OS服务等   表示错误(因为例如0.15没有准确表示,因此   舍入规则适用于所代表的数字而不适用于打印的数字   数字,所以圆(0.15,1)可以是0.1或0.2)。

round( .5 + 0:10 )
#### [1]  0  2  2  4  4  6  6  8  8 10 10

Greg Snow的另一个相关电子邮件交流:R: round(1.5) = round(2.5) = 2?

  

这一轮甚至统治背后的逻辑是我们正在努力   代表一个潜在的连续值,如果x来自真实的   连续分布,则x == 2.5为0的概率为   2.5可能已经从2.45和2.54999999999999之间的任何值进行了一次...,如果我们使用我们在小学学习的0.5规则的舍入,则双舍入意味着值   在2.45和2.50之间将全部变为3(首先是圆形的   到2.5)。这往往会使估计偏向上升。要删除   我们需要在四舍五入到2.5之前回归(这是   通常不可能是不切实际的,或者只是将一半的时间和   向下舍入一半的时间(或者更好的是与...成比例   我们有多大可能看到低于或高于2.5的值四舍五入为2.5,但是   大多数基础发行版将接近50/50)。该   随机方法是随机获得圆函数   选择哪种方式来舍入,但确定性类型则不是   对此感到满意,所以"围绕甚至"被选中(圆到奇数   应该是相同的)作为一个一致的规则,圆形和   大约50/50。

     

如果您正在处理2.5可能代表精确数据的数据   价值(例如金钱),那么你可以通过乘以所有来做得更好   值为10或100并以整数形式工作,然后仅转换回来   用于最终印刷。请注意,2.50000001轮到3,所以如果你   保持更多的精度数字,直到最后的打印,然后四舍五入   将进入预期的方向,或者您可以添加0.000000001(或   在四舍五入之前,你的价值就是其他小数字,但那可以   向上偏向你的估计。

答案 1 :(得分:3)

当我在大学时,一位数值分析教授告诉我们,你描述四舍五入的方法是正确的。你不应该总是向上舍入数字(整数).5,因为它与(整数)和(整数+ 1)相等。为了最小化总和的误差(或平均值的误差,或其他),这些情况的一半应该四舍五入,另一半应该向下舍入。 R程序员似乎与我的数值分析教授有着相同的观点......