【问题标题】:Simple division in R yields wrong result [duplicate]R中的简单除法会产生错误的结果[重复]
【发布时间】:2017-10-01 10:25:56
【问题描述】:

我遇到了 R 的问题。

如果我插入以下除法,我会得到这些结果。

9207550/4

结果:

2301888

但应该是:

2301887.5

如果我为多个零添加扩展分子和分母,我会得到相同的结果:

9207550.0000 / 4.0000

2301888

有人遇到同样的问题吗?有人可以向我解释这种行为吗?

提前谢谢你。 任何帮助表示赞赏。

【问题讨论】:

  • print(9207550/4, digits=10) 所以这是一种视错觉/默认打印怪癖。见?print.default。实际上,您可以在控制台输入2301887.5 并查看四舍五入。
  • 您已经向我们展示了打印的结果。这与计算结果不同。计算结果如你所料:x <- 9207550/4; 4*x
  • @Frank 谢谢你的评论。我发现我误解了结果。
  • @jogo 我明白了,所以计算毕竟是正确的。谢谢。
  • 其他问题的重点是减少长小数。由于这解决了丢失的数字,我认为它有必要提出自己的问题。这里的答案肯定与那里的答案不同。

标签: r


【解决方案1】:

R 中有一个选项可以控制显示的位数。举个例子:

options(digits=5)

或者,如果您不喜欢科学记数法,那么:

options(digits = 999)

大多数系统倾向于内置一些默认显示精度,但这与@jogo 提到的实际计算不同。在结果呈现方面,R 与这些系统中的任何一个都没有什么不同。

就计算而言,基本R 计算足以满足您在日常生活中处理的大多数数字,但是,如果您真的想精确到n 小数,其中@ 987654327@ 通常可以大于 15,我建议使用 gmpRmpfrrcdd 包。

编辑

我刚刚注意到您在float 部门的尝试。某些语言版本(如 python 2.xx)在 floatsintegers 之间对除法有不同的处理方式,在编写时牢记存储和计算效率。这种差异现在在最新版本中消失了。 R 是由统计学家为统计学家构建的,因此您可以放心,当涉及到数学运算时,默认处理会有所不同。数字就是它们——数字。 Intfloat 是程序结构,而不是数学结构。

【讨论】:

    猜你喜欢
    • 2016-02-25
    • 2018-02-20
    • 2023-03-30
    • 2017-09-07
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多