圆函数似乎有错误。下面我希望它返回6,但它返回5.
round(5.5)
# 5
其他5.5,例如6.5,4.5会像我们预期的那样返回7,5。
有任何解释吗?
答案 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程序员似乎与我的数值分析教授有着相同的观点......