首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的舍入误差?

R中的舍入误差?
EN

Stack Overflow用户
提问于 2018-07-20 21:08:25
回答 3查看 5.2K关注 0票数 2

请考虑以下几点:

代码语言:javascript
运行
复制
> x<-178379.4999999999999999999999999999999
> x
[1] 178379.5
> round(x)
[1] 178380

这似乎是一个基本的舍入错误。R中有已知的舍入误差吗?还是因为即使在工作记忆中,R也只能处理22位数字?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-20 21:36:04

这是两个非常频繁的A'd Q的组合。

  • 有限浮点精度:这R FAQ 7.31,参见例如为什么这些数字不相等? .值四舍五入为178379.5。如果您将options(digits=22)设置为将数字打印到更多的小数位,则不会有任何帮助;由于R只存储多达53位二进制/22位小数位的精度,所以精度已经丢失。
  • 循环到偶数:r“圈到偶数”,参见R中的圆函数有错误吗?。这意味着值将被舍入。

这是关于打印精度的而不是

如果你少用9‘s,你就会看到你期望的东西(这将是R有限的打印精度加上预期的四舍五入的组合)。

代码语言:javascript
运行
复制
> x <- 178379.49
> 
> x
[1] 178379.5  ## prints as .5, but full precision is present
> round(x)
[1] 178379
票数 6
EN

Stack Overflow用户

发布于 2018-07-20 21:28:44

由于硬件中的浮点表示,这个问题可能更广泛。

不确定本网站是否有用,但它显示编写178379.499999999999999 99999999 9999999999 99 9999999999 99 99 99时所存储的数字实际上是178379.5 (按照IEEE-754浮点标准):

票数 3
EN

Stack Overflow用户

发布于 2018-07-20 21:33:12

有关大于15位数的解释,请参见?print.default

大量数字 请注意,对于数字的大值(目前为>= 16 ),有效数字数的计算将取决于平台实现sprintf()功能的内部(C库)。

精密度

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51450396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档