【问题标题】:Is there an error in round function in R? [duplicate]R中的round函数是否有错误? [复制]
【发布时间】:2023-03-28 10:40:01
【问题描述】:

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

round(5.5) 
# 5

5.5 以外的其他值,如 6.5、4.5,如我们预期的那样返回 7、5。

有什么解释吗?

【问题讨论】:

  • “四舍五入”不是唯一可能的舍入模式。 R 手册说,round 对半部分的作用取决于“操作系统服务”的作用。您的系统似乎更喜欢四舍五入到最接近的奇数。您使用的是哪种操作系统和架构?
  • 我电脑中的操作系统是“Windows 10 Home”。谢谢你的解释。

标签: r rounding


【解决方案1】:

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

请注意,对于 5 的四舍五入,IEC 60559 标准预计 被使用,'去偶数'。因此 round(0.5) 为 0 并且 回合(-1.5)是-2。但是,这取决于操作系统服务和 表示错误(因为例如 0.15 没有准确表示,所以 四舍五入规则适用于表示的数字,而不适用于打印的数字 数,因此 round(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 (或 其他小数)在四舍五入之前的值,但这可以 使您的估计值偏高。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多